[英]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.