如何将数据从HTTPResponse流式传输到控制台?

时间:2011-03-08 21:02:49

标签: c# .net

我正在编写一个需要接收大量数据的控制台应用程序。我试着像这样编码,

 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);

但是这段代码需要等待整个响应才能将数据写出到控制台。我如何重新编码以在收到数据时将数据流式传输到控制台?

感谢。

4 个答案:

答案 0 :(得分:1)

如果要获取大数据,则需要异步使用HttpWebRequest。

使用HttpWebRequest.BeginGetResponse()

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

异步操作完成后,将调用回调函数。您至少需要从此函数调用EndGetResponse()。

答案 1 :(得分: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();

答案 2 :(得分:0)

尝试一次阅读一行:ReadLine()

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

答案 3 :(得分: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);
     }
 }