Как определить (элегантно), требуется ли проверка подлинности прокси-сервера в приложении C # winforms - PullRequest
12 голосов
/ 29 января 2009

Мой пример использования таков: я хочу обратиться к веб-службе, и если я нахожусь за прокси-сервером, который требует аутентификации, я хочу просто использовать учетные данные по умолчанию ...

  WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultCredentials;

В противном случае я просто сделаю вызов. Было бы очень хорошо определить, требуется ли авторизация заранее, а не обрабатывать исключение после того, как я попытаюсь сделать вызов.

Идеи

Ответы [ 6 ]

14 голосов
/ 29 января 2009

Только после того, как я впервые развернул свое приложение , я понял, что некоторые пользователи были за брандмауэрами ... отключены, чтобы протестировать его. Вместо того, чтобы тестировать «407 аутентификацию требуется», я просто делаю ту же настройку Proxy независимо от того, нужна она вам или нет ...

System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri.AbsoluteUri);
//HACK: add proxy
IWebProxy proxy = WebRequest.GetSystemWebProxy();
proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
req.Proxy = proxy;
req.PreAuthenticate = true;
//HACK: end add proxy
req.AllowAutoRedirect = true;
req.MaximumAutomaticRedirections = 3;
req.UserAgent = "Mozilla/6.0 (MSIE 6.0; Windows NT 5.1; DeepZoomPublisher.com)";
req.KeepAlive = true;
req.Timeout = 3 * 1000; // 3 seconds

Я не уверен, каковы относительные преимущества / недостатки (сначала попробуйте {} catch {} без прокси-сервера, а не просто с помощью описанного выше), но теперь этот код работает для меня как на работе (аутентификация прокси), так и дома (нет).

4 голосов
/ 29 января 2009

System.Net.WebProxy имеет свойство, называемое UseDefaultCredentials, которое может быть тем, что вы хотите (но я должен признать, что здесь немного невежества). Ссылка на соответствующую документацию: здесь .

1 голос
/ 29 января 2009

На самом деле, похоже, что это не проблема в конце концов, ранее я устанавливал аутентификацию так ...

  WebProxy proxy = new WebProxy(@"http://<myProxyAddress>:8080");
  proxy.Credentials = new NetworkCredential(<myUSerName>, <myPassword>, <myDomain>);
  WebRequest.DefaultWebProxy = proxy;

Это было бы хорошо, когда я был за прокси, но выдавал ошибку, когда прокси не было, поэтому, конечно, я ожидал ту же ошибку выше, поскольку я все еще просто устанавливал те же учетные данные, но вы знаете, что они говорят о если предположить что-то .... на самом деле нет никаких ошибок при установке кредитов по умолчанию, все сладко.

0 голосов
/ 12 ноября 2012

Я настоятельно призываю вас попробовать этот ответ на аналогичный вопрос (не: не принятый ответ). Никаких изменений кода, просто строка в вашем файле app.config.

0 голосов
/ 29 января 2009

Если вы хотите проверить настройки прокси в IE, вы также можете заглянуть в реестр: проверьте ветку HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings дерева реестра - там много опций и настроек. В частности: ProxyEnable (DWORD, 0 = нет прокси, 1 = прокси включен).

0 голосов
/ 29 января 2009

Похоже, что если вы оставите прокси-сервер в покое, .NET должен просто использовать настройки прокси IE , который кажется наиболее "правильным" способом работы с прокси ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...