带有大数据集的不完整HttpWebResponse

本文关键字:HttpWebResponse 数据集 | 更新日期: 2023-09-27 18:02:22

我有一些代码来下载我已经使用了一段时间的网页的内容。这段代码工作得很好,从来没有提供一个问题,仍然没有…然而,有一个相当大的页面(2MB,没有图像),有4个表,分别有4,20,100,600行,大约20列宽。

当试图获取所有数据时,它完成时没有任何明显的错误或异常,但只返回第4个表中的第60行-有时多,有时少。浏览器在大约20-30秒内完成加载,并持续刷新页面,直到完成。

我已经尝试了一些解决方案,从SO和搜索没有任何不同的结果。下面是当前的代码,但我有:代理,异步,无超时,false keepalive…

我不能使用WebClient(作为另一个远取尝试),因为我需要使用cookie容器登录。

        HttpWebRequest pageImport = (HttpWebRequest)WebRequest.Create(importUri);
        pageImport.ReadWriteTimeout = Int32.MaxValue;
        pageImport.Timeout = Int32.MaxValue;
        pageImport.UserAgent = "User-Agent  Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3";
        pageImport.Accept = "Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
        pageImport.KeepAlive = true;
        pageImport.Timeout = Int32.MaxValue;
        pageImport.ReadWriteTimeout = Int32.MaxValue;
        pageImport.MaximumResponseHeadersLength = Int32.MaxValue;
        if (null != LoginCookieContainer)
        {
            pageImport.CookieContainer = LoginCookieContainer;
        }
        Encoding encode = System.Text.Encoding.GetEncoding("utf-8");

        using (WebResponse response = pageImport.GetResponse())
        using (Stream stream = response.GetResponseStream())
        using (StreamReader reader = new StreamReader(stream, encode))
        {
            stream.Flush();
            HtmlRetrieved = reader.ReadToEnd();
        }

带有大数据集的不完整HttpWebResponse

尝试逐块读取而不是reader.ReadToEnd();只是给你一个想法:

//将流管道到具有所需编码格式的更高级别流读取器。StreamReader readStream = new StreamReader(ReceiveStream, encode);控制台。WriteLine("'nResponse stream received");Char[] read = new Char[256];

    // Read 256 charcters at a time.    
 int count = readStream.Read( read, 0, 256 );
    Console.WriteLine("HTML...'r'n");
while (count > 0) 
{
        // Dump the 256 characters on a string and display the string onto the console.
    String str = new String(read, 0, count);
    Console.Write(str);
    count = readStream.Read(read, 0, 256);
}

我怀疑这是作为服务器端的配置设置来处理的。顺便说一句,我认为你可能设置你的属性不正确。从文字中删除"user-agent"answers"accept",如下所示:

pageImport.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3";         
pageImport.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";      

虽然我仍然要尝试提供的建议,并将改变我的答案,如果它的工作,似乎在这种情况下,问题是代理。我得到了前面的代理和代码工作如预期和更快。

我将不得不考虑一些代理优化,因为这段代码必须在代理后面运行。