2013-05-13 3 views
42

Я искал ошибку с помощью службы, которую я вызываю через .NET-сервер .NET, пытаясь перенаправить запрос через локальный прокси (Fiddler), но настройки моего прокси-сервера, похоже, не вступают в силу ,Использование прокси с .NET 4.5 HttpClient

Вот как я создаю клиента:

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; 
} 

я отправить запрос по:

var response = CreateHttpClient(ctx, sid).PostAsJsonAsync("api/prefs/", smp).Result; 

Запрос идет прямо на сервер, не пытаясь ударить прокси. Что я упустил?

+0

Испытано ли обслуживание в вашей локальной машине? Рассмотрите прокси-прокси для локальных адресов. – Xaqron

+0

Кстати, создание экземпляров 'HttpClient' дорого. Вы должны повторно использовать экземпляры, когда это возможно. Есть несколько сообщений в блогах, которые говорят об этом, используя Google. – NathanAldenSr

ответ

7

А, базовый адрес, на который я указывал, был http://localhost:8081. Оказывается, несмотря на то, что при установке BypassOnLocal на значение false, очевидно, что localhost по-прежнему является достаточно сложным, что он обходит прокси.

Я добавил привязку домена в IIS, запись файла хоста, чтобы указать, что домен до 127.0.0.1, используемый недавно созданный домен, теперь он работает.

+6

Вы также можете использовать 'http: // localhost.: 8888' Обратите внимание на волшебную точку! –

+2

Я получаю плохой запрос - неверное имя хоста, когда я помещаю. после localhost – Michael

+0

@DarrelMiller Я не получаю никаких изменений после добавления localhost. ' <прокси bypassonlocal = "False" usesystemdefault = "True" ProxyAddress = "http://localhost.:8888"/> ' – felickz

1

Является ли Fiddler настроенным на захват трафика из всех процессов? Посмотрите на строку состояния, где вы видите «Захват». Он должен показывать рядом с ним «Все процессы». Если он показывает «Веб-браузеры», щелкните его и измените на все процессы. Это может отличаться в зависимости от версии Fiddler, которую вы используете.

38

Этот код работает для меня:

var httpClientHandler = new HttpClientHandler 
         { 
          Proxy = new WebProxy("http://localhost:8888", false), 
          UseProxy = true 
         } 

Обратите внимание, что я не поставляя пустой массив в мой WebProxy конструктор. Возможно, это проблема?

+0

Удаление массива строк работал для меня слишком. Я должен был войти в HOSTS, чтобы заставить прокси работать на localhost. –

+0

Вы только что спасли мой день^_ ^ –

Смежные вопросы