using var handler = new HttpClientHandler
{
    UseProxy = true,
    Proxy = new WebProxy("http://proxy.example:8080")
};
using var client = new HttpClient(handler);

string html = await client.GetStringAsync(
    "https://www.example.com/catalog");
var document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(html);

Este fragmento moderno de .NET usa System.Net y System.Net.Http. El cliente configurado se encarga del enrutamiento de red y Html Agility Pack recibe la cadena HTML devuelta. Conserva un cliente configurado adecuadamente para el trabajo continuo en lugar de reconstruir sus grupos para cada página.

Para este ejemplo de página pública, un candidato no autenticado de la lista de proxies HTTP puede sustituir al intermediario. Sustituye el destino por separado. La URL del sitio conserva su identidad TLS. Las credenciales de proxy autenticadas pertenecen a WebProxy; ni las credenciales del sitio ni la verificación deshabilitada las sustituyen.

GetStringAsync trata los estados HTTP que no son de éxito como errores. No conviertas una descarga fallida en un HtmlDocument vacío. Si la aplicación necesita encabezados, detalles del estado o un cuerpo de error, usa una operación HTTP orientada a la respuesta e inspecciónala antes de analizar.

El método de cadena evita una conversión adicional incondicional a UTF-8 de bytes sin procesar. Si obtienes bytes deliberadamente, traslada los requisitos de codificación de la respuesta y del documento a la decodificación.

LoadHtml produce un documento analizado; no ejecuta scripts, no carga estilos ni sigue enlaces. Resuelve los enlaces relativos posteriores respecto a la ubicación de la respuesta y recuerda que los elementos renderizados por el navegador pueden faltar en el código fuente descargado. Cada respuesta debería producir su propio documento incluso cuando las solicitudes compartan el mismo cliente HTTP configurado.

Artículos relacionados