2014-01-08 130 views
0

我想从一个网站简单的gzip编码的HTML响应,并不断变得超时,下面是我的代码:HttpWebRequest.GetResponse操作超时

HttpWebRequest httpClient = (HttpWebRequest)WebRequest.Create(url); 
httpClient.Method = "GET"; 
httpClient.Accept = "text/html, application/xhtml+xml, */*"; 
httpClient.Headers.Add("Accept-Encoding: gzip, deflate"); 
httpClient.Headers.Add("Accept-Language: en-US"); 
httpClient.Headers.Add("DNT: 1"); 
httpClient.ProtocolVersion = HttpVersion.Version10; 
httpClient.KeepAlive = true; 
httpClient.Timeout = System.Threading.Timeout.Infinite; 
httpClient.CookieContainer = cookieJar; 

String responseAsText; 
using (HttpWebResponse response = (HttpWebResponse)httpClient.GetResponse()) 
{ 
    System.IO.StreamReader sr; 
    if (response.ContentEncoding.Equals("gzip")) 
    { 
      sr = new StreamReader(new GZipStream(response.GetResponseStream(), CompressionMode.Decompress)); 
    } 
    else 
    { 
      sr = new System.IO.StreamReader(response.GetResponseStream()); 
    } 
    responseAsText = sr.ReadToEnd(); 
} 

我想要的网址命中“HTTPS client.schwab.com/Login/SignOn/CustomerCenterLogin.aspx”

这工作完全正常的浏览器,使用招我认为浏览器的请求头和自Transfer-Encoding: chunked,我已经使用HttpVersion10

我也tr ied设置httpClient.Timeout = System.Threading.Timeout.Infinite,但它永远不会收到响应,但是在浏览器中响应会在几秒钟内完成。

请有人帮助我实现这一目标。

回答

1

可能您可以尝试设置Agent属性,因此它不会将您识别为bot。

+0

你的意思是添加User-Agent头? –

+0

httpClient.DefaultRequestHeaders.TryAddWithoutValidation(“Accept”,“text/html,application/xhtml + xml,application/xml”); httpClient.DefaultRequestHeaders.TryAddWithoutValidation(“Accept-Encoding”,“gzip,deflate”);httpClient.DefaultRequestHeaders.TryAddWithoutValidation(“User-Agent”,“Mozilla/5.0(Windows NT 6.2; WOW64; rv:19.0)Gecko/20100101 Firefox/19.0”); httpClient.DefaultRequestHeaders.TryAddWithoutValidation(“Accept-Charset”,“ISO-8859-1”); – realnero

+0

试试这些头文件 – realnero

0

我认为尼禄已经回答了你的问题..

尝试增加你的这几行代码..

request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0";