解决方案 »

  1.   

    本机测试过下面的代码可以正常获取 public static string UserAgent = @"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11";
    public static string DownloadHtmlPage(string pageUrl, Encoding encoding, string requestMethod, int timeOut)
    {
    string value = string.Empty;
    HttpWebResponse response = null;
    Stream data = null;
    StreamReader sr = null;
    try
    {
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(pageUrl);
    request.Method = requestMethod;
    request.ServicePoint.Expect100Continue = false;
    //是否使用 Nagle 不使用 提高效率
    request.ServicePoint.UseNagleAlgorithm = false;
    //最大连接数
    request.ServicePoint.ConnectionLimit = 65500;
    //数据是否缓冲 false 提高效率
    request.AllowWriteStreamBuffering = false;
    request.UserAgent = UserAgent;
    request.KeepAlive = true;
    request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
    request.Headers.Add("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3");
    request.Headers.Add("Accept-Encoding:gzip,deflate,sdch");
    request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
    request.Headers.Add("Cache-Control", "max-age=0");

    if (timeOut != -1) request.Timeout = timeOut;
    response = (HttpWebResponse)request.GetResponse();
    data = response.GetResponseStream();
    sr = new StreamReader(data, encoding);
    string str;
    StringBuilder source = new StringBuilder();
    while ((str = sr.ReadLine()) != null)
    source.Append(str).Append("\r\n");
    value = source.ToString();
    }
    catch (WebException e)
    {
    //MessageBox.Show(e.Message);
    }
    finally
    {
    if (sr != null) sr.Close();
    if (data != null) data.Close();
    if (response != null) response.Close();
    }
    return value;
    }
      

  2.   

    十分感谢,我测试了一下,发现运行起程序,第一次运行该代码还是会超时,然后运行第2次才可以获得数据,再运行一次也是正常的。用这个代码比我原来用xmldocument.load方式好,用那个要死很久,用这个的话只要设置很短的超时时间,可以连续读好几次。我现在的解决方式是连续读3次,有一次成功就可以进行分析了。
    第一次运行会超时的问题不太懂,有没有人有经验,是为啥?
    win7 32位,vs2008。
      

  3.   

    不好意思,下午Accept-Encoding那句写错了,应该是request.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");,请改一下在运行