【发布时间】:2015-07-07 05:55:28
【问题描述】:
我正在使用 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;
}
【问题讨论】:
-
你试过WebClient的“DownloadString”方法吗?
-
尝试使用硬编码进行测试。例如,Encoding.GetEncoding("ISO-8859-1")。我在这里看不到任何缺陷,应该可以工作。请记住,错误可能是服务器端的
-
@Pak 是的,尝试了 WebClient DownloadString 和 HtmlAgilityPack HtmlWeb.Load。结果相同:/
-
@NickProzee 感谢您的意见。我尝试对其进行硬编码,但结果相同。就像你说的,也许是在服务器端。那样的话我就完蛋了。
标签: c# httpwebrequest httpwebresponse text-parsing