簡體   English   中英

HttpWebResponse返回“不完整”流

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM