[英]HttpWebResponse returns an 'incomplete' stream
我正在使用HttpWebRequest向Web服务器重复请求,但作为回报,我随机获得了“中断”响应流。 例如,它不包含“我知道”应该在那里的标签。 如果我连续多次请求同一页面,它会“破损”〜3/5。
该请求始终返回200响应,因此我首先认为响应中插入了一个空值,使StreamReader认为它已到达末尾。
我尝试过:1)将所有内容读取到字节数组中并进行清理2)在每个请求之后插入随机Thread.Sleep
下面的代码是否存在任何潜在的不良做法,或者谁能告诉我为什么我随机获得不完整的响应流? 据我所见,我正在关闭所有非托管资源,所以应该不会有问题吧?
public string ReturnHtmlResponse(string url)
{
string result;
var request = (HttpWebRequest)WebRequest.Create(url);
{
using(var response = (HttpWebResponse)request.GetResponse())
{
Console.WriteLine((int)response.StatusCode);
var encoding = Encoding.GetEncoding(response.CharacterSet);
using(var stream = response.GetResponseStream())
{
using(var sr = new StreamReader(stream,encoding))
{
result = sr.ReadToEnd();
}
}
}
}
return result;
}
我看不到您的代码有任何直接缺陷。 可能是“父项”使用语句之一在嵌套语句之前完成。 尝试将using更改为Dispose()和Close()方法。
public string ReturnHtmlResponse(string url)
{
string result;
var request = (HttpWebRequest)WebRequest.Create(url);
var response = (HttpWebResponse)request.GetResponse();
Console.WriteLine((int)response.StatusCode);
var encoding = Encoding.GetEncoding(response.CharacterSet);
var stream = response.GetResponseStream();
var sr = new StreamReader(stream,encoding);
result = sr.ReadToEnd();
sr.Close();
stream.Close();
response.Close();
sr.Dispose();
stream.Dispose();
response.Dispose();
return result;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.