Enviar peticiones de .NET HttpClient por un proxy
Configura WebProxy en un HttpClientHandler y evita dejar desactivado el proxy o asociarlo al cliente equivocado.
La petición debe usar el HttpClient creado con tu controlador de proxy. Crear un objeto WebProxy independiente no cambia la ruta de otro 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());Sustituye la dirección de documentación por un proxy HTTP real de tu servicio o de la lista de proxies HTTP. Esta sintaxis de nivel superior sirve para un proyecto de consola C# moderno; los proyectos antiguos pueden poner las instrucciones en un Main asíncrono.
Comprueba ambas propiedades del controlador: Proxy selecciona el endpoint y UseProxy=true habilita su uso. Si el endpoint funciona por separado pero no en la aplicación, confirma que ningún código desactive UseProxy y que la llamada use esta instancia. El controlador dedicado evita depender de la detección del proceso o del sistema operativo.
Cuando el operador del proxy proporciona una cuenta, asigna un NetworkCredential a la propiedad WebProxy.Credentials. La Authorization del sitio corresponde a otro salto, y una entrada IP:port pública no proporciona credenciales predeterminadas. Un punto de escucha http:// puede transportar HTTPS mediante túnel; mantén la verificación normal del destino.
Este programa corto libera los objetos al salir. Para llamadas de servicio repetidas, sigue las recomendaciones .NET sobre la vida del cliente y conserva el cliente/controlador para la carga, en vez de reconstruir los pools de conexiones en cada petición. Revisa el estado devuelto: una ruta de proxy funcional puede seguir transportando un rechazo del sitio.