Obtenha HTML através de um proxy antes de analisá-lo com Html Agility Pack
Combine um HttpClient configurado com proxy e o Html Agility Pack, mantendo os erros de rede separados da análise de HTML.
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 e System.Net.Http. O cliente configurado cuida do encaminhamento de rede, e o Html Agility Pack recebe a cadeia HTML devolvida. Mantenha um cliente configurado adequadamente para trabalho contínuo em vez de reconstruir seus pools para cada página.
Para este exemplo de página pública, um candidato não autenticado da lista de proxies HTTP pode substituir o intermediário. Substitua o destino separadamente. A URL do site mantém sua identidade TLS. As credenciais de proxy autenticadas pertencem ao WebProxy; nem as credenciais do site nem a verificação desativada as substituem.
GetStringAsync trata os estados HTTP sem sucesso como erros. Não converta um download com falha em um HtmlDocument vazio. Se o aplicativo precisar de cabeçalhos, detalhes do status ou de um corpo de erro, use uma operação HTTP orientada à resposta e inspecione-a antes da análise.
O método de cadeia evita uma conversão adicional incondicional de bytes brutos para UTF-8. Se você obtém bytes deliberadamente, leve os requisitos de codificação da resposta e do documento para a decodificação.
LoadHtml produz um documento analisado; ele não executa scripts, não carrega estilos nem segue links. Resolva os links relativos subsequentes em relação à localização da resposta, e lembre-se de que os elementos renderizados pelo navegador podem faltar no código-fonte baixado. Cada resposta deve produzir seu próprio documento mesmo quando as solicitações compartilham o mesmo cliente HTTP configurado.