C#2008 SP1
このコードを使用して、[インターネットオプション]でプロキシが設定されているかどうかを検出しています。プロキシがある場合は、これを自分のWebクライアントに設定します。
プロキシのアドレスが存在するかどうかを確認しています。ない場合は、webclientに設定するプロキシがありません。
これはこれを行う正しい方法ですか?
アドバイスありがとうございます。
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;
}
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;
}
WebClient
etcはWinHTTP設定を使用するため(IE設定ではありません)、WinHTTPを構成するのが最も簡単です!On XP etcあなたは使うことができます:
proxycfg -u
現在のIE設定をWinHTTPストアにインポートします。その後、WebClient
などが問題なく同じ設定を使用できるようになります。VistaおよびWindows 7ではこれが見つかります下:
netsh winhttp import proxy ie
これは管理者として実行する必要があります。
最初に、 GetDefaultProxy は非推奨としてマークされているため、当面の間であっても保証されません。次に、 Address はnullになる可能性があるため、指定したコードはNullReferenceExceptionの危険を冒します。
以下を試してください:
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);
}
これにより、たとえばWebサービスを呼び出す前に、デフォルトのプロキシ設定と資格情報が取得されます。
<system.net>
<defaultProxy enabled="false" useDefaultCredentials="false">
<proxy/>
<bypasslist/>
<module/>
</defaultProxy>
このスニペットをapplication.configファイルで使用します。
これは私のために働く
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
リクエストプロキシをWebRequest.GetSystemWebProxy()
に設定すると、問題が解決しました。
WebProxy.GetDefaultProxy()
が実際の方法ですが、現在は非推奨です。
System.Net.Configuration.ProxyElementクラスを確認してください。あなたが探している情報があるかもしれません。
あなたが説明することはうまくいきます、あなたはレジストリを調べることもできます。
プロキシをチェックアウトするために私が書いたPowerShellスクリプトは次のとおりです。
function get-proxy
{
$path = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
$reg = get-itemproperty $path
return $reg
}