2009-08-03 14 views
18

Sto tentando di leggere da un URL in un oggetto System.IO.Stream. Ho cercato di usareÈ possibile leggere da un URL in un oggetto System.IO.Stream?

Dim stream as Stream = New FileStream(msgURL, FileMode.Open) 

ma ottengo un errore che i formati di URI non sono supportate con oggetti FileStream. Esiste un metodo che posso utilizzare ereditato da System.IO.Stream che è in grado di leggere da un URL?

risposta

18

VB.Net:

Using req As WebRequest = HttpWebRequest.Create("url here"), _ 
     stream As Stream = req.GetResponse().GetResponseStream() 

End Using 

C#:

using(WebRequest req = HttpWebRequest.Create("url here")) 
using (Stream stream = req.GetResponse().GetResponseStream()) 
{ 

} 
+4

se non ho torto oggetto req dovrebbe essere WebRequest, non un oggetto HttpWebRequest .. –

+0

Utilizzando questo codice non ero in grado di deserializzare il contenuto all'altro capo della richiesta web. Suggerisco di utilizzare la risposta di Thomas Levesque di seguito, poiché ha funzionato perfettamente. –

31

Uso WebClient.OpenRead:

Using wc As New WebClient() 
    Using stream As Stream = wc.OpenRead(msgURL) 
     ... 
    End Using 
End Using 
+1

Ah, non sapevo che OpenRead esistesse. Lo ricorderò quello. –

+1

Non lo sapevo neanche ... ho solo indovinato qualcosa di simile esistito, e controllato nella libreria MSDN;) –

+0

Ovviamente il modo più semplice ... Aggiungere il codice per mostrare la chiusura del flusso e lo smaltimento del client web, e è semplicemente perfetto :) – Guffa

2

Sì, è possibile utilizzare un oggetto HttpWebRequest per ottenere un flusso di risposta:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
Stream receiveStream = response.GetResponseStream(); 
// read the stream 
receiveStream.Close(); 
response.Close(); 

(Spellato e semplificato da the docs).

Problemi correlati