Подтвердить что ты не робот

С# webclient и прокси-сервер

Я использую класс веб-клиента в своем исходном коде для загрузки строки с помощью http.

Это работало нормально. Тем не менее, клиенты в компании все подключены к прокси-серверу. И проблема началась с этого.

Когда я протестировал свое приложение, я не думаю, что он может проходить через прокси-сервер, поскольку исключение, которое продолжает получать, - это "нет ответа от xxx.xxx.xxx.xxx, который является IP-адресом прокси-сервера.

Тем не менее, я все же могу перейти к URL-адресу веб-сайта, и он правильно отображает строку в браузере при подключении через прокси-сервер, но не при использовании моего веб-клиента.

Есть ли что-то в веб-клиенте, которое мне нужно настроить, чтобы я мог получить доступ к URL-адресу из-за прокси-сервера?

using (WebClient wc = new WebClient())
{
    string strURL = "http://xxxxxxxxxxxxxxxxxxxxxxxx";

    //Download only when the webclient is not busy.
    if (!wc.IsBusy)
    {
        string rtn_msg = string.Empty;
        try
        {
            rtn_msg = wc.DownloadString(new Uri(strURL));
            return rtn_msg;
        }
        catch (WebException ex)
        {
            Console.Write(ex.Message);
            return false;
        }
        catch (Exception ex)
        {
            Console.Write(ex.Message);
            return false;
        }
    }
    else
    {
        System.Windows.Forms.MessageBox.Show("Busy please try again");
        return false;
    }
}
4b9b3361

Ответ 1

Мое решение:

WebClient client = new WebClient();
WebProxy wp = new WebProxy(" proxy server url here");
client.Proxy = wp;
string str = client.DownloadString("http://www.google.com");

Ответ 2

Если вам необходимо выполнить аутентификацию прокси-сервера, вам нужно установить UseDefaultCredentials в false и установить прокси-сервер Credentials.

WebProxy proxy = new WebProxy();
proxy.Address = new Uri("mywebproxyserver.com");
proxy.Credentials = new NetworkCredential("usernameHere", "pa****rdHere");  //These can be replaced by user input
proxy.UseDefaultCredentials = false;
proxy.BypassProxyOnLocal = false;  //still use the proxy for local addresses

WebClient client = new WebClient();
client.Proxy = proxy;

string doc = client.DownloadString("http://www.google.com/");

Если вам нужен простой прокси-сервер, вы пропустите большинство строк выше. Все что вам нужно:

WebProxy proxy = new WebProxy("mywebproxyserver.com");

Ответ 3

Я столкнулся с той же проблемой, но с помощью веб-клиента для загрузки файла из Интернета с помощью приложения Winform, которое было добавлено в app.config:

<system.net>
    <defaultProxy useDefaultCredentials="true" />
</system.net>

То же самое решение будет работать для приложения asp.net, вставляющего те же строки в web.config.

Надеюсь, это поможет.

Ответ 5

Ответ, предложенный Джонатаном, является правильным, но требует, чтобы вы указывали учетные данные прокси и url в коде. Как правило, лучше разрешить использование учетных данных как установку в системе по умолчанию (пользователи обычно настраивают параметры LAN в любом случае, если они используют прокси-сервер)...

Следующий ответ был предоставлен Davide в более раннем ответе, но для этого требуется изменить файлы app.config. Это решение, вероятно, более полезно, так как оно делает то же самое в CODE.

Чтобы приложение использовало настройки прокси-сервера по умолчанию, используемые в пользовательской системе, можно использовать следующий код:

IWebProxy wp = WebRequest.DefaultWebProxy;
wp.Credentials = CredentialCache.DefaultCredentials; 
wc.Proxy = wp;

Это позволит использовать код приложения для использования прокси (с регистрационными учетными данными и настройками URL-адреса прокси-сервера)... Нет головных болей!:)

Надеемся, что это поможет будущим зрителям этой страницы решить их проблемы!

Ответ 6

    byte[] data;
                using (WebClient client = new WebClient())
                {
                  ICredentials cred;
                  cred = new NetworkCredential("[email protected]", "mybestpassword");
                  client.Proxy = new WebProxy("192.168.0.1",8000);
                  client.Credentials = cred;
                  string myurl="http://mytestsite.com/source.jpg";
                  data = client.DownloadData(myUrl);
               }

          File.WriteAllBytes(@"c:\images\target.jpg", data);