Как использовать Fiddler с HttpClient?
Я знаю, что есть много вопросов / ответов, блогов об этом, не говоря о FAQ Telerik. Тем не менее я не мог найти это диагностировано и решено в чистом виде:
Контекст:
У меня есть приложение Web API, и у меня есть клиент (модульный тест), который использует HttpClient для отправки запросов в API. Приложение веб API слушает вHTTP: // локальный: 8631 / Иногда я использую Fiddler, чтобы увидеть, что происходит.
Выпуск:
Fiddler не перехватывает трафик между моим HttpClient и Web API. После запуска Fiddler трафик все еще в порядке, но не отображается в Fiddler.
Диагностика пока:
Важный: Использование любого браузера и отправка запросовHTTP: // локальный: 8631 / работает, Я имею в виду:трафик, захваченный FiddlerКонфигурирование HttpClient для явного использования Fiddler в качестве прокси не помогает.Изменение URL HttpClient сHTTP: // локальный: 8631 / вHTTP: // локальный.fiddler: 8631 /помогаетнезависимо от того, был ли настроен прокси или нет.Выводы: По крайней мере, в моем случае: речь идет не о том, HttpClient настроен явно для использования Fiddler в качестве прокси или нет. Речь идет о поведении локального хоста HttpClient и / или Fiddler.
Проблема снова:
Можно спросить: проблема решена, тогда в чем вопрос? Что ж...
Q1: Это все еще болезненная проблема, потому что URL-адрес где-то закодирован или настроен (я имею в видуHTTP: // локальный: 8631 / или же HTTP: // локальный.fiddler: 8631, поэтому при каждом запуске и остановке скрипача он должен обновляться. Подробнее: проверка источника в системе контроля версий и проверка на другом компьютере со стороны партнера по команде могут вызвать проблемы. Итак: есть ли менее болезненный обходной путь для этого?
Жесткое кодирование имени моей машины (которое также может работать) вызывает те же проблемы и проблемы при работе в команде и при использовании системы контроля версий.
Q2: Почему это противоречивое поведение: чистоHTTP: // локальный: 8631 / работает из любого браузера, но не из HttpClient.
Я думаю, что ответ на Q2 может приблизить нас к более удобному обходному пути.
Код выставки
// 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)
};
// ...