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.

Artigos relacionados