2011-03-08 101 views
0

我正在編寫一個需要接收大量數據的控制檯應用程序。我試圖這樣編碼,如何將數據從HTTPResponse流式傳輸到控制檯?

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
request.Method = "GET"; 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
using (StreamReader sr = new StreamReader(response.GetResponseStream())) 
{ 
     responseText = sr.ReadToEnd(); 
} 

Console.WriteLine(responseText); 

但是,這段代碼需要等待整個響應將數據寫出到控制檯。我怎樣才能重新編碼這個數據流到控制檯,因爲它正在接收?

謝謝。

+1

適合我。我得到整個迴應! – 2011-03-08 21:11:24

+0

此代碼可以工作,但可能需要一段時間,具體取決於數據量。 – OrahSoft 2011-03-08 22:16:39

回答

0
char[] chars = new char[1024]; 
int numread = 0; 
while ((numread = sr.Read(chars, 0, chars.Length)) > 0) 
    Console.Write(new string(chars)); 
Console.WriteLine(); 
0

嘗試讀取一行一次:ReadLine()

 while (!sr.EndOfStream) 
     { 
      responseText = sr.ReadLine(); 
      Console.WriteLine(responseText); 
     } 
0

這就是ReadToEnd()手段。

來寫任何一個文件:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
request.Method = "GET"; 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
var responseStream = response.GetResponseStream(); 
using (var fileStream = new FileStream("C:\\temp\\myfile.avi")) 
{ 
    var buffer = new byte[8192]; 
    while (true) 
    { 
      var bytesRead = responseStream.Read(buffer, 0, buffer.Length); 
      if (bytesRead <= 0) 
       break; 
      fileStream.Write(buffer, 0, bytesRead); 
    } 
} 
1

如果你得到一個大的數據,您需要使用異步HttpWebRequest的。

使用HttpWebRequest.BeginGetResponse()

HttpWebRequest webRequest; 
void StartWebRequest() 
{ 
    webRequest.BeginGetResponse(new AsyncCallback(FinishWebRequest),null); 
} 
void FinishWebRequest(IAsyncResult result) 
{ 
    webRequest.EndGetResponse(result); 
} 

當異步操作完成,回調函數被調用。你至少需要從這個函數調用EndGetResponse()。

相關問題