【问题标题】:how do I stream data from an HTTPResponse to the console?如何将数据从 HTTPResponse 流式传输到控制台?
【发布时间】:2011-03-08 21:02:48
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

  • 为我工作。我得到了全部回复!
  • 此代码可以运行,但可能需要一段时间,具体取决于数据量。

标签: c# .net


【解决方案1】:

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

使用 HttpWebRequest.BeginGetResponse()

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:
      char[] chars = new char[1024];
      int numread = 0;
      while ((numread = sr.Read(chars, 0, chars.Length)) > 0)
         Console.Write(new string(chars));
      Console.WriteLine();
      

      【讨论】:

        【解决方案4】:

        这就是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);
             }
         }
        

        【讨论】:

          猜你喜欢
          • 2018-10-08
          • 1970-01-01
          • 2020-04-10
          • 2011-02-24
          • 1970-01-01
          • 2015-02-07
          • 1970-01-01
          • 2020-09-03
          • 2018-11-22
          相关资源
          最近更新 更多