2009-08-03 25 views
18

Tôi đang cố đọc từ url vào đối tượng System.IO.Stream. Tôi đã cố gắng sử dụngCó thể đọc từ url vào đối tượng System.IO.Stream không?

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

nhưng tôi gặp lỗi khi định dạng URI không được hỗ trợ với đối tượng FileStream. Có một số phương pháp tôi có thể sử dụng mà thừa kế từ System.IO.Stream có thể đọc từ một URL?

Trả lời

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

nếu tôi không sai đối tượng req phải WebRequest, không phải là một đối tượng HttpWebRequest .. –

+0

Sử dụng mã này tôi đã không thể deserialize nội dung trên đầu kia của yêu cầu web. Tôi đề nghị sử dụng câu trả lời của Thomas Levesque bên dưới, vì nó hoạt động hoàn hảo. –

31

Sử dụng WebClient.OpenRead:

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

Ah, tôi không biết OpenRead tồn tại. Tôi sẽ nhớ điều đó. –

+1

Tôi không biết hoặc là ... Tôi chỉ đoán một cái gì đó như thế tồn tại, và kiểm tra trong thư viện MSDN;) –

+0

Tất nhiên cách đơn giản nhất ... Thêm mã để hiển thị đóng cửa của dòng và xử lý của khách hàng web, và nó chỉ là hoàn hảo. :) – Guffa

2

Có, bạn có thể sử dụng một HttpWebRequest đối tượng để có được một dòng phản ứng:

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

(Được gỡ xuống và được đơn giản hóa từ the docs).

Các vấn đề liên quan