Impossible de télécharger les données HTML à partir d'URL https à l'aide de htmlagilitypack

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

Question

J'ai un "petit" problème htmlagilitypack (HAP). Lorsque j'essaie d'obtenir des données d'un site Web, j'obtiens cette erreur:

Une exception non gérée du type 'System.ArgumentException' s'est produite dans mscorlib.dll

Informations complémentaires: 'gzip' n'est pas un nom de codage pris en charge. Pour plus d'informations sur la définition d'un codage personnalisé, consultez la documentation de la méthode Encoding.RegisterProvider.

J'utilise ce morceau de code pour obtenir les données du site Web:

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

Après ce code, j'obtiens cette erreur. J'ai tout essayé de Google mais rien n'a aidé.

Quelqu'un peut-il me dire comment résoudre ce problème?

Je vous remercie

Réponse acceptée

HtmlWeb ne prend pas en charge le téléchargement à partir de https. Vous pouvez donc utiliser WebClient avec un peu de modification pour décompresser automatiquement 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;
    }
}

Ensuite, utilisez HtmlDocument.LoadHtml() pour renseigner votre instance HtmlDocument partir d'une chaîne HTML:

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

Réponse populaire

Vous pouvez intercepter la demande lorsque vous utilisez HtmlWeb pour la modifier en fonction de vos besoins.

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

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow