2011-07-18 17 views
3

我有一些代码,下载我已经使用了一段时间的网页的内容。这段代码工作正常,从来没有提供过一个问题,但仍然没有...但是,有一个页面是相当大的(2MB,没有图像)与4个表,分别有4,20,100,600行和约20列宽。不完整的HttpWebResponse与大型数据集

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

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

我不能使用WebClient(作为另一个远取企图),因为我需要使用cookiecontainer登录。

 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(); 
     } 

回答

0

虽然我仍然会尝试提供的建议,并会改变我的答案,如果它的作品,似乎在这情况下,问题是代理。我得到了代理,代码正常工作,速度更快。

我必须看一些代理优化,因为此代码必须在代理之后运行。

1

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

//将流传输到更高级别的流读取器与所需的编码格式。 StreamReader readStream = new StreamReader(ReceiveStream,encode); Console.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); 
} 
0

我怀疑这是作为服务器端的配置设置处理的。顺便说一下,我认为你可能会错误地设置你的属性。删除“用户代理”,并从文字“接受”,因为这样的:

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";