无法使用htmlagilitypack从https URL下载HTML数据

c# html html-agility-pack https web-scraping

我有一个“小”问题htmlagilitypack(HAP)。当我试图从网站获取数据时,我收到此错误:

mscorlib.dll中发生了未处理的“System.ArgumentException”类型异常

附加信息:'gzip'不是受支持的编码名称。有关定义自定义编码的信息,请参阅Encoding.RegisterProvider方法的文档。

我正在使用这段代码从网站获取数据:

HtmlWeb page = new HtmlWeb();
var url = "https://kat.cr/";
var data = page.Load(url);

在这段代码之后我得到了那个错误。我尝试了谷歌的一切,但没有任何帮助。

有人能告诉我如何解决这个问题吗?

谢谢

一般承认的答案

HtmlWeb不支持从https下载。因此,您可以使用WebClient进行一些修改来自动解压缩GZip

class MyWebClient : WebClient
{
    protected override WebRequest GetWebRequest(Uri address)
    {
        HttpWebRequest request = base.GetWebRequest(address) as HttpWebRequest;
        request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
        return request;
    }
}

然后使用HtmlDocument.LoadHtml()从HTML字符串填充HtmlDocument实例:

var url = "https://kat.cr/";
var data = new MyWebClient().DownloadString(url);
var doc = new HtmlDocument();
doc.LoadHtml(data);

热门答案

您可以在使用HtmlWeb根据您的要求修改请求时拦截请求。

var page = new HtmlWeb()
{
  PreRequest = request =>
  {
    // Make any changes to the request object that will be used.
    request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
    return true;
  }
};

var url = "https://kat.cr/";
var data = page.Load(url);


Related

许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow