WebRequest加载HTMLDocument,返回SSL网站

时间:2018-02-28 12:43:13

标签: c# ssl httpwebrequest html-agility-pack

非常标准的HttpWebRequest实现,每当我传递某个URL来获取html时,它都会返回,只有特殊字符。回来的一个例子如下。

现在这个网站是SSL,所以我想知道这是否与它有关但我以前从来没有遇到过这个问题,而且我已经将它与其他SSL网站一起使用了。

�


       ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
        var request = (HttpWebRequest)WebRequest.Create(url);
        using (var response = (HttpWebResponse)request.GetResponse())
        {
            Stream data = response.GetResponseStream();
            HtmlDocument hDoc = new HtmlDocument();
            using (StreamReader readURLContent = new StreamReader(data))
            {
                html = readURLContent.ReadToEnd();
                hDoc.LoadHtml(html);
            }
        }

对于这个具体问题,我真的找不到任何东西,所以如果有人能指出我的方向非常棒,那么我就有点失落。

编辑:这是一张它看起来像的图片,因为我无法复制粘贴它 enter image description here

1 个答案:

答案 0 :(得分:0)

我的猜测是响应被压缩了。如果您使用像Charles或Fiddler这样的WebDebugger。您可以看到请求和结构化以及它们包含哪些数据 - 这使得稍后在编写它们时复制http请求变得更加容易。请尝试以下代码。

try
{
    string webAddr = url;
    var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
    httpWebRequest.ContentType = "text/html; charset=utf-8";
    httpWebRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0";
    httpWebRequest.AllowAutoRedirect = true;
    httpWebRequest.Method = "GET";
    httpWebRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;


    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream(), Encoding.UTF8))
    {
        var responseText = streamReader.ReadToEnd();
        doc.LoadHtml(responseText);
    }
}
catch (WebException ex)
{
    Console.WriteLine(ex.Message);
}

代码在请求中设置编码。您还可以在读取响应时在streamreader处设置编码。并启用自动解压缩。