2015-11-09 2 views
1

Я в сети компании. В этой сети я не могу ping внешних веб-сайтов по IP. Я могу назвать их только по URL-адресу, например браузеру. Вот почему я использую WebRequest, чтобы узнать, установлено ли подключение к Интернету.HttpWebRequest Прокси-аутентификация Пользователь и учетные данные пользователя (ошибка 407)

Когда я пытаюсь вызвать «www.google.com» я получил «(407) Proxyauthentification требуется»

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

Это мой код:

try 
     { 
      var uriBuilder = new UriBuilder(_URL); 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uriBuilder.Uri); 
      request.Timeout = 1000; 
      //request.Accept = "*/*"; 
      WebProxy proxy = new WebProxy("14*.***.***.***:8080"); 
      //request.UseDefaultCredentials = true; //Dont work 
      //proxy.Credentials = System.Net.NetworkCredential(); //Dont work 
      proxy.Credentials = CredentialCache.DefaultNetworkCredentials; //dont work too 
      request.Proxy = proxy; 
      request.PreAuthenticate = true; 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

      _PingByURL = response.StatusCode == HttpStatusCode.OK; 

     } 
     catch 
     { 

      _PingByURL =false; 
     } 

И мой app.cfg:

<system.net> 
    <defaultProxy enabled ="true" useDefaultCredentials = "true"> 
    <proxy usesystemdefault ="True" bypassonlocal="True"/> <!--True must written in capital Letters--> 
    </defaultProxy> 
</system.net> 

Как я могу решить ошибку "(407) Proxyauthentification требуется"? Или есть лучший способ проверить, установлено ли подключение через Internet через прокси-сервер без его проверки?

+0

Вы уверены, что прокси-сервер вашей компании не требует определенного имени пользователя/пароля? 'DefaultCredentials' означает использование учетной записи Windows текущего пользователя (не имя пользователя/пароль, а фактическая учетная запись). –

+0

требуется имя пользователя и пароль домена. Ему не нужно вводить его. Он использует его автоматически. – Shadow

+0

Значит, 'DefaultCredentials' не являются учетными данными, если вы вошли в систему как пользователь домена? – Shadow

ответ

0

Я нашел свою ошибку.

<system.net> 
    <defaultProxy enabled ="true" useDefaultCredentials = "true"> 
     <!--<proxy usesystemdefault ="True" bypassonlocal="True"/>--> //This is the fault 
    </defaultProxy> 
    </system.net> 

Эта линия вызывает проблемы. Я никогда не рассказывал об этом в моей конфигурации приложения из-за решений других потоков об этой строке.

Но теперь это работает только в Visual Studio. Если я попробую .exe без Visual Студия все еще говорит «407 Authenticationrequired»

+0

Удалите следующие две строки и передайте их еще раз, request.Proxy = proxy; request.PreAuthenticate = true; – Don

+0

Да, это сработало. но теперь он работает только в том случае, если я запускаю его на Visual Studio. Если я запускаю только * .exe, он больше не работает. Но почему? – Shadow

+0

Ах. Мне нужно (приложение) .exe.config с exe, чтобы он работал. – Shadow

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