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

时间:2020-12-16 20:24:10

I am writing a console application that needs to receive a large amount of data. I tried to code it like this,

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

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

But this code needs to wait for the entire response to write out the data to the console. How can I recode this to stream the data to the console as it is being received?

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

Thanks.

谢谢。

4 个解决方案

#1


1  

If you are getting a large data, you will need to use HttpWebRequest asynchronously.

如果您正在获取大数据,您将需要异步使用HttpWebRequest。

Use HttpWebRequest.BeginGetResponse()

使用HttpWebRequest.BeginGetResponse()

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

When the asynchronous operation is complete, a callback function is been called. You need to at least call EndGetResponse() from this function.

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

#2


0  

Try reading one line at a time: ReadLine():

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

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

#3


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

#4


0  

That's what ReadToEnd() means.

这就是ReadToEnd()方法。

To write everything to a file:

将所有内容写入文件:

 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


1  

If you are getting a large data, you will need to use HttpWebRequest asynchronously.

如果您正在获取大数据,您将需要异步使用HttpWebRequest。

Use HttpWebRequest.BeginGetResponse()

使用HttpWebRequest.BeginGetResponse()

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

When the asynchronous operation is complete, a callback function is been called. You need to at least call EndGetResponse() from this function.

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

#2


0  

Try reading one line at a time: ReadLine():

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

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

#3


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

#4


0  

That's what ReadToEnd() means.

这就是ReadToEnd()方法。

To write everything to a file:

将所有内容写入文件:

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