Включить проверку подлинности прокси для обычного приложения Windows - PullRequest
0 голосов
/ 20 мая 2010

Интернет моей компании работает на прокси-сервере с проверкой подлинности (т. Е. Браузер запрашивает окно для ввода имени пользователя / пароля при каждой попытке доступа к любой веб-странице).

Теперь у меня есть приложение для Windows, которое пытается получить доступ к Интернету (например, WebPI / Visual Studio 2008 для каналов RSS), но, поскольку они не могут открыть окно аутентификации, они не могут подключиться к Интернету с ошибкой:

(407) Требуется проверка подлинности прокси

. Исключением является VS2008, в первый раз он всегда не может загрузить RSS-каналы на странице запуска, но когда я нажимаю на ссылку, отображается окно аутентификации, и после этого все работает нормально.

У меня такой вопрос: как настроить обычное приложение Windows (через файл app.config / app.manifest) для доступа к сети, чтобы иметь возможность отображать окно аутентификации или предоставлять учетные данные по умолчанию.

Чтобы исследовать эту тему, я создал одно консольное приложение на VS2008, которое пытается что-то найти в Google и отобразить результат на консоли. Код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;

namespace WebAccess.Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter Serach Criteria:");
            string criteria = Console.ReadLine();
            string baseAddress = "http://www.google.com/search?q=";
            string output = "";

            try
            {

                // Create the web request   
                HttpWebRequest request = WebRequest.Create(baseAddress + criteria) as HttpWebRequest;

                // Get response   
                using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                {
                    // Get the response stream   
                    StreamReader reader = new StreamReader(response.GetResponseStream());

                    // Console application output   
                    output = reader.ReadToEnd();
                }

                Console.WriteLine("\nResponse : \n\n{0}", output);
            }
            catch (Exception ex)
            {
                Console.WriteLine("\nError : \n\n{0}", ex.ToString());
            }
        }
    }
}

При запуске это выдает ошибку

Enter Serach Criteria:
Lalit

Error :

System.Net.WebException: The remote server returned an error: (407) Proxy Authen
tication Required.
   at System.Net.HttpWebRequest.GetResponse()
   at WebAccess.Test.Program.Main(String[] args) in D:\LK\Docs\VS.NET\WebAccess.
Test\WebAccess.Test\Program.cs:line 26
Press any key to continue . . .

Ответы [ 3 ]

7 голосов
/ 25 мая 2010

Разрешите себе:

Создана сборка для предоставления учетных данных прокси-сервера по умолчанию

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;

namespace ProxyCredProvider
{
    public class DefProxy : IWebProxy
    {
        public ICredentials Credentials
        {
            get { return new NetworkCredential("xxxx", "xxxx"); }
            set { }
        }

        public Uri GetProxy(Uri destination)
        {
            return new Uri("http://xx.xx.xx.xx:8080/");
        }

        public bool IsBypassed(Uri host)
        {
            return false;
        } 

    }
}

Установил его в GAC. и используйте App.Config, чтобы подключить вышеуказанный модуль к любому файлу, пытающемуся получить доступ к сети

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.net>
    <defaultProxy enabled="true" useDefaultCredentials="false">
      <module type="ProxyCredProvider.DefProxy, ProxyCredProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=5e3bf8f3a8a14cca" />
    </defaultProxy>
  </system.net>
</configuration>
0 голосов
/ 20 мая 2010

Используйте объект WebProxy, затем используйте app.config для получения proxyurl и имени пользователя. В качестве пароля вы можете ввести его в консоли или открыть окно пароля.

WebProxy proxy = new WebProxy(proxyurl);
proxy.Credentials = new NetworkCredential(username, password, domain);
request.Proxy = proxy;

EDIT

Извините, я неправильно понял, как насчет NTLMAPS

0 голосов
/ 20 мая 2010

Edit:

Существует пара утилит, которые туннелируют любое приложение через прокси, указанный в http://kakku.wordpress.com/2007/11/18/proxify-any-application-tsocks-and-proxychains-force-any-program-to-communicate-through-a-socks-https-proxy-or-use-cascading-proxies/ - ищите ссылки «Альтернативы Windows».

...