Enviar requisições do .NET HttpClient por um proxy
Configure WebProxy em um HttpClientHandler e evite deixar o roteamento por proxy desativado ou associá-lo ao cliente errado.
A requisição precisa usar o HttpClient criado com seu handler de proxy. Criar um objeto WebProxy sem relação com ele não altera a rota de outro cliente.
using System;
using System.Net;
using System.Net.Http;
var proxy = new WebProxy("http://203.0.113.10:8080")
{
BypassProxyOnLocal = false
};
using var handler = new HttpClientHandler
{
Proxy = proxy,
UseProxy = true
};
using var client = new HttpClient(handler)
{
Timeout = TimeSpan.FromSeconds(15)
};
using var response = await client.GetAsync("https://example.com/");
Console.WriteLine((int)response.StatusCode);
Console.WriteLine(await response.Content.ReadAsStringAsync());Substitua o endereço de documentação por um proxy HTTP real do serviço ou da lista de proxies HTTP. Essa sintaxe de nível superior serve para um projeto de console C# moderno; projetos antigos podem colocar as instruções em um Main assíncrono.
Confira as duas propriedades do handler: Proxy seleciona o endpoint e UseProxy=true habilita seu uso. Se o endpoint funciona separadamente, mas não no aplicativo, confirme que nenhum código desativa UseProxy e que a chamada usa essa instância. O handler dedicado evita depender da descoberta do processo ou do sistema operacional.
Quando o operador do proxy fornece uma conta, atribua um NetworkCredential à propriedade WebProxy.Credentials. A Authorization do site atende a outro salto, e uma entrada IP:port pública não fornece login padrão. Um listener http:// pode transportar HTTPS por túnel; mantenha a verificação normal do destino.
Este programa curto descarta os objetos ao sair. Para chamadas de serviço repetidas, siga as orientações .NET sobre a vida útil do cliente e mantenha cliente/handler para a carga, em vez de reconstruir os pools de conexão a cada requisição. Examine o status retornado: uma rota de proxy funcionando ainda pode transportar uma rejeição do site.