¿Cómo usar Fiddler con HttpClient?
Sé que hay muchas preguntas / respuestas, blogs sobre esto, sin hablar de las preguntas frecuentes de Telerik. Aún así no pude encontrar esto diagnosticado y resuelto de una manera pura y clara:
Contexto:
Tengo una aplicación de API web y tengo un cliente (prueba unitaria) que utiliza HttpClient para enviar solicitudes a la API. La aplicación API web escucha enhttp: // localhost: 8631 / A veces uso Fiddler para ver qué está pasando.
Problema:
Fiddler no captura el tráfico entre mi HttpClient y la API web. Después de iniciar Fiddler, el tráfico sigue siendo correcto, pero no se muestra en Fiddler.
Diagnósticos hasta ahora:
Importante: Usar cualquier navegador y enviar solicitudes ahttp: // localhost: 8631 / está trabajando, Quiero decir:tráfico capturado por FiddlerConfigurar HttpClient explícitamente para usar Fiddler como proxy no ayuda.Cambiar la URL de HttpClient dehttp: // localhost: 8631 / ahttp: // localhost.violinista: 8631 /ayuda, independientemente de que el proxy se haya configurado o no.Conclusiones: Al menos mi caso: no se trata de que HttpClient esté configurado explícitamente para usar Fiddler como proxy o no. Se trata del comportamiento de host local de HttpClient y / o Fiddler.
Emitir de nuevo:
Uno puede preguntar: Problema resuelto, ¿cuál es la pregunta? Bien...
Q1: Esto sigue siendo un problema doloroso, porque la URL está codificada o configurada en algún lugar (quiero decirhttp: // localhost: 8631 / o http: // localhost.violinista: 8631 por lo que cada inicio y parada de Fiddler debe actualizarse. Más: el control de la fuente al control de la fuente y la verificación en una otra máquina por parte de un compañero de equipo puede causar problemas. Entonces: ¿Hay alguna solución menos dolorosa para esto?
La codificación dura del nombre de mi máquina (que también podría funcionar) causa el mismo dolor y problema al trabajar en equipo y al usar el control de fuente
Q2: ¿Por qué es este comportamiento inconsistente: purohttp: // localhost: 8631 / funciona desde cualquier navegador pero no desde HttpClient.
Creo que responder la Q2 puede acercarnos a una solución más útil.
Exhibición de código
// Using the following url w o r k s regardless of any proxy setting
// ...but it is a pain to hardcode or configure this and change depending on Fiddler is running or not
//private const string ApiUrl = "http://localhost.fiddler:8631/";
// This is not working regardless any proxy setting. Trafic bypasses Fiddler
private const string ApiUrl = "http://localhost:8631/";
protected HttpClient GetClient()
{
var httpClientHandler = new HttpClientHandler
{
// Does not work
//Proxy = new WebProxy("http://localhost:8888", false),
// Does not work
Proxy = WebRequest.DefaultWebProxy,
UseProxy = true
};
var client = new HttpClient(httpClientHandler)
{
BaseAddress = new Uri(ApiUrl)
};
// ...