我正在使用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;
}
答案 0 :(得分:0)
我没有看到你的代码有任何直接缺陷。可能是其中一个'Parent'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;
}