Настройки автоматического определения прокси-сервера С#
С# 2008 SP1
Я использую код, чтобы определить, был ли прокси установлен в "Свойства обозревателя". Если есть прокси-сервер, то я установлю его в своем веб-клиенте.
Поэтому я просто проверяю, существует ли адрес прокси. Если этого не происходит, то в веб-клиенте нет прокси-сервера.
Это правильный способ сделать это:
Большое спасибо за любой совет,
WebProxy proxy = WebProxy.GetDefaultProxy();
if (proxy.Address.ToString() != string.Empty)
{
Console.WriteLine("Proxy URL: " + proxy.Address.ToString());
wc.Proxy = proxy;
}
====== Редактирование кода ======
[DllImport("wininet.dll", CharSet = CharSet.Auto)]
private extern static bool InternetGetConnectedState(ref InternetConnectionState_e lpdwFlags, int dwReserved);
[Flags]
enum InternetConnectionState_e : int
{
INTERNET_CONNECTION_MODEM = 0x1,
INTERNET_CONNECTION_LAN = 0x2,
INTERNET_CONNECTION_PROXY = 0x4,
INTERNET_RAS_INSTALLED = 0x10,
INTERNET_CONNECTION_OFFLINE = 0x20,
INTERNET_CONNECTION_CONFIGURED = 0x40
}
// Return true or false if connecting through a proxy server
public bool connectingThroughProxy()
{
InternetConnectionState_e flags = 0;
InternetGetConnectedState(ref flags, 0);
bool hasProxy = false;
if ((flags & InternetConnectionState_e.INTERNET_CONNECTION_PROXY) != 0)
{
hasProxy = true;
}
else
{
hasProxy = false;
}
return hasProxy;
}
Ответы
Ответ 1
Похоже, что WebRequest.DefaultWebProxy является официальной заменой для WebProxy.GetDefaultProxy.
Вы можете оставить это в своем исходном коде только с небольшой модификацией. Что-то вроде:
WebProxy proxy = (WebProxy) WebRequest.DefaultWebProxy;
if (proxy.Address.AbsoluteUri != string.Empty)
{
Console.WriteLine("Proxy URL: " + proxy.Address.AbsoluteUri);
wc.Proxy = proxy;
}
Ответ 2
WebClient
и т.д. используют настройки WinHTTP (не настройки IE), поэтому проще всего настроить WinHTTP! В XP и т.д. Вы можете использовать:
proxycfg -u
чтобы импортировать текущие настройки IE в хранилище WinHTTP. После этого WebClient
и т.д. Должны иметь возможность использовать те же настройки без проблем. В Vista и Windows 7 это теперь можно найти по адресу:
netsh winhttp import proxy ie
Вам нужно запустить это как администратор.
Ответ 3
Во-первых, GetDefaultProxy отмечен как устаревший, так что у вас нет гарантии, что он будет рядом даже в ближайшем будущем. Во-вторых, Address может быть нулевым, поэтому код, который вы указали, подвержен исключению NullReferenceException:
Ответ 4
Попробуйте следующее:
public string GetMeMyInfo(string searchCriteria)
{
// Instatiate the web service and declare the necessary variables
WsService.WsServiceBus oWsGetInfo = new WsService.WsServiceBus();
// Configure the Web Service Proxy
oWsGetInfo.Proxy = System.Net.WebProxy.GetDefaultProxy();
oWsGetInfo.Proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
// Invoke the web service
return oWsGetInfo.GetInfo4Me(searchCriteria);
}
Это приведет к настройке прокси-сервера по умолчанию и учетным данным перед вызовом вашего веб-сервиса, например.
Ответ 5
Проверьте класс System.Net.Configuration.ProxyElement. Возможно, у вас есть информация, которую вы ищете.
То, что вы описываете, работает, вы также можете посмотреть в реестре.
Здесь powershell script я написал, чтобы проверить прокси:
function get-proxy
{
$path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
$reg = get-itemproperty $path
return $reg
}
Ответ 6
Установка моего запроса-прокси на WebRequest.GetSystemWebProxy()
решила проблему.
WebProxy.GetDefaultProxy()
является фактическим, но теперь он устарел.
Ответ 7
<system.net>
<defaultProxy enabled="false" useDefaultCredentials="false">
<proxy/>
<bypasslist/>
<module/>
</defaultProxy>
Используйте этот фрагмент в файле application.config.
Ответ 8
Это работает для меня
var proxy = WebRequest.GetSystemWebProxy();
Uri testUrl = new Uri("http://proxy.example.com");
var proxyUrl = proxy.GetProxy(testUrl);
if (proxyUrl != testUrl)
//Use your proxy here
else
//We are not using a proxy