Ответ 1
Мое решение:
WebClient client = new WebClient();
WebProxy wp = new WebProxy(" proxy server url here");
client.Proxy = wp;
string str = client.DownloadString("http://www.google.com");
Я использую класс веб-клиента в своем исходном коде для загрузки строки с помощью 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;
}
}
Мое решение:
WebClient client = new WebClient();
WebProxy wp = new WebProxy(" proxy server url here");
client.Proxy = wp;
string str = client.DownloadString("http://www.google.com");
Если вам необходимо выполнить аутентификацию прокси-сервера, вам нужно установить 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");
Я столкнулся с той же проблемой, но с помощью веб-клиента для загрузки файла из Интернета с помощью приложения Winform, которое было добавлено в app.config:
<system.net>
<defaultProxy useDefaultCredentials="true" />
</system.net>
То же самое решение будет работать для приложения asp.net, вставляющего те же строки в web.config.
Надеюсь, это поможет.
Вам нужно настроить прокси-сервер в объекте WebClient.
См. свойство WebClient.Proxy:
http://msdn.microsoft.com/en-us/library/system.net.webclient.proxy(VS.80).aspx
Ответ, предложенный Джонатаном, является правильным, но требует, чтобы вы указывали учетные данные прокси и url в коде. Как правило, лучше разрешить использование учетных данных как установку в системе по умолчанию (пользователи обычно настраивают параметры LAN в любом случае, если они используют прокси-сервер)...
Следующий ответ был предоставлен Davide в более раннем ответе, но для этого требуется изменить файлы app.config. Это решение, вероятно, более полезно, так как оно делает то же самое в CODE.
Чтобы приложение использовало настройки прокси-сервера по умолчанию, используемые в пользовательской системе, можно использовать следующий код:
IWebProxy wp = WebRequest.DefaultWebProxy;
wp.Credentials = CredentialCache.DefaultCredentials;
wc.Proxy = wp;
Это позволит использовать код приложения для использования прокси (с регистрационными учетными данными и настройками URL-адреса прокси-сервера)... Нет головных болей!:)
Надеемся, что это поможет будущим зрителям этой страницы решить их проблемы!
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);