我有代码,发送GET请求并在流中收到答案。我用streamreader读取流来结束。这是代码:
HttpWebRequest requestGet = (HttpWebRequest)WebRequest.Create(url);
requestGet.Method = "GET";
requestGet.Timeout = 5000;
HttpWebResponse responseGet = (HttpWebResponse)requestGet.GetResponse();
StreamReader reader = new StreamReader(responseGet.GetResponseStream());
StringBuilder output = new StringBuilder();
output.Append(reader.ReadToEnd());
responseGet.Close();
但我不喜欢该程序在开始使用响应之前等待所有数据收到。如果我能这样做(伪代码)会很棒:
//here sending GET request
do
{
response.append(streamPart recieved);
//here work with response
} while (stream not ended)
我尝试了streamReader.Read(char [],int32_1,int32_2),但我不能指定int32_2,因为我不知道我收到了多少个符号。如果我使用ReadToEnd - 它等待所有响应加载。
答案 0 :(得分:0)
Read接受char[]
缓冲区并返回从流中读取的字符数。
以下是如何以块的形式读取响应的示例:
public static void Main(string[] args)
{
var req = WebRequest.Create("http://www.google.com");
req.Method = "GET";
req.Timeout = 5000;
using (var response = req.GetResponse())
using (var reader = new StreamReader(response.GetResponseStream()))
{
char[] buffer = new char[1024];
int read = 0;
int i = 0;
do
{
read = reader.Read(buffer, 0, buffer.Length);
Console.WriteLine("{0}: Read {1} bytes", i++, read);
Console.WriteLine("'{0}'", new String(buffer, 0, read));
Console.WriteLine();
} while(!reader.EndOfStream);
}
}
我没有看到任何无关的空白区域或重复的数据。