No se pueden descargar datos HTML desde la URL https usando htmlagilitypack

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

Pregunta

Tengo un "pequeño" problema htmlagilitypack (HAP). Cuando intenté obtener datos de un sitio web, obtengo este error:

Se produjo una excepción no controlada del tipo 'System.ArgumentException' en mscorlib.dll

Información adicional: 'gzip' no es un nombre de codificación compatible. Para obtener información sobre cómo definir una codificación personalizada, consulte la documentación del método Encoding.RegisterProvider.

Estoy usando este código para obtener los datos del sitio web:

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

Después de este código me sale ese error. Intenté todo desde el google pero nada ayudó.

¿Alguien puede decirme cómo resolver este problema?

Gracias

Respuesta aceptada

HtmlWeb no admite la descarga desde https. Entonces, en cambio, puedes usar WebClient con un poco de modificación para descomprimir automáticamente 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;
    }
}

Luego use HtmlDocument.LoadHtml() para completar su instancia de HtmlDocument desde una cadena HTML:

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

Respuesta popular

Puede interceptar la solicitud cuando usa HtmlWeb para modificarla según sus requisitos.

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);


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué