繁体   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