Usando un proxy con.NET 4.5 HttpClient
asp.net-web-api .net-4.5 (3)
¿Fiddler está configurado para capturar el tráfico de todos los procesos? Mira la barra de estado donde ves "Capturar". Debería mostrar "Todos los procesos" al lado. Si muestra "navegadores web", haga clic en él y cámbielo a todos los procesos. Esto podría ser diferente dependiendo de la versión de Fiddler que use.
Estoy solucionando un error con un servicio al que llamo a través del HttpClient de .NET, tratando de enrutar la solicitud a través de un proxy local (Fiddler), pero la configuración de mi proxy parece no tener efecto.
Así es como creo el cliente:
private HttpClient CreateHttpClient(CommandContext ctx, string sid) {
var cookies = new CookieContainer();
var handler = new HttpClientHandler {
CookieContainer = cookies,
UseCookies = true,
UseDefaultCredentials = false,
Proxy = new WebProxy("http://localhost:8888", false, new string[]{}),
UseProxy = true,
};
// snip out some irrelevant setting of authentication cookies
var client = new HttpClient(handler) {
BaseAddress = _prefServerBaseUrl,
};
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
return client;
}
luego envío la solicitud por:
var response = CreateHttpClient(ctx, sid).PostAsJsonAsync("api/prefs/", smp).Result;
La solicitud va directamente al servidor sin intentar golpear al proxy. ¿Qué me perdí?
Ah, la BaseAddress a la que apuntaba era http://localhost:8081
. Resulta que a pesar de establecer BypassOnLocal en falso, evidentemente localhost sigue siendo lo suficientemente especial como para pasar por alto el proxy.
Agregué un enlace de dominio en IIS, la entrada del archivo de host para apuntar ese dominio a 127.0.0.1, usé el dominio recién creado, ahora funciona.
Este código funcionó para mí:
var httpClientHandler = new HttpClientHandler
{
Proxy = new WebProxy("http://localhost:8888", false),
UseProxy = true
}
Tenga en cuenta que no estoy suministrando una matriz vacía a mi constructor WebProxy
. Tal vez ese es el problema?