Невозможно загрузить данные HTML с https-URL с помощью htmlagilitypack

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

Вопрос

У меня есть «небольшая» проблема htmlagilitypack (HAP). Когда я попытался получить данные с веб-сайта, я получаю эту ошибку:

Необработанное исключение типа «System.ArgumentException» произошло в mscorlib.dll

Дополнительная информация: «gzip» не поддерживает имя кодировки. Информацию об определении настраиваемой кодировки см. В документации по методу Encoding.RegisterProvider.

Я использую этот фрагмент кода для получения данных с веб-сайта:

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

После этого кода я получаю эту ошибку. Я пробовал все из Google, но ничего не помогло.

Может ли кто-нибудь сказать мне, как решить эту проблему?

спасибо

Принятый ответ

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() чтобы заполнить ваш экземпляр HtmlDocument из строки HTML:

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
Является ли этот КБ законным? Да, узнайте, почему