WebRequest.ProxyプロパティにWebProxyオブジェクトを設定することにより、プロキシサーバーを指定できます。
プロキシサーバーに「localhost:8080」を指定する例を以下に示します。
'HttpWebRequestオブジェクトの作成 Dim webreq As System.Net.HttpWebRequest = _ CType(System.Net.WebRequest.Create("http://www.yahoo.com"), _ System.Net.HttpWebRequest) 'プロキシの設定 'プロキシサーバーに"localhost:8080"を指定 Dim proxy As New System.Net.WebProxy("http://localhost:8080") webreq.Proxy = proxy 'HttpWebResponseの取得 Dim webres As System.Net.HttpWebResponse = _ CType(webreq.GetResponse, System.Net.HttpWebResponse) '受信して表示 Dim st As System.IO.Stream = webres.GetResponseStream() Dim sr As New System.IO.StreamReader(st) Console.WriteLine(sr.ReadToEnd()) '閉じる sr.Close() st.Close()
//HttpWebRequestオブジェクトの作成 System.Net.HttpWebRequest webreq = (System.Net.HttpWebRequest) System.Net.WebRequest.Create("http://www.yahoo.com"); //プロキシの設定 //プロキシサーバーに"localhost:8080"を指定 System.Net.WebProxy proxy = new System.Net.WebProxy("http://localhost:8080"); webreq.Proxy = proxy; //HttpWebResponseの取得 System.Net.HttpWebResponse webres = (System.Net.HttpWebResponse) webreq.GetResponse(); //受信して表示 System.IO.Stream st = webres.GetResponseStream(); System.IO.StreamReader sr = new System.IO.StreamReader(st); Console.WriteLine(sr.ReadToEnd()); //閉じる sr.Close(); st.Close();
.NET Framework 2.0からは、WebClientクラスにProxyプロパティが追加されました。これを使った例を、以下に示します。
'WebClientオブジェクトの作成 Dim wc As New System.Net.WebClient() 'プロキシの設定 wc.Proxy = New System.Net.WebProxy("http://localhost:8080") '受信して表示 Dim source As String = wc.DownloadString("http://www.yahoo.com") Console.WriteLine(source) '閉じる wc.Dispose()
//WebClientオブジェクトの作成 System.Net.WebClient wc = new System.Net.WebClient(); //プロキシの設定 wc.Proxy = new System.Net.WebProxy("http://localhost:8080"); //受信して表示 string source = wc.DownloadString("http://www.yahoo.com"); Console.WriteLine(source); //閉じる wc.Dispose();
WebProxyコンストラクタの2番目のパラメータにTrueを指定すると、ローカルアドレスのプロキシをバイパスする(プロキシを通さずに、直接アクセスする)ようになります(または、WebProxy.BypassProxyOnLocalプロパティをTrueにします)。また、WebProxyコンストラクタの3番目のパラメータに、バイパスするURIの正規表現パターンを文字列の配列で指定できます(または、WebProxy.BypassListプロパティを設定します)。
'ローカルと"dobon.net"をバイパスする Dim bypassUrls() As String = {"dobon\.net"} webreq.Proxy = _ New System.Net.WebProxy("http://localhost:8080", True, bypassUrls)
//ローカルと"dobon.net"をバイパスする string[] bypassUrls = new string[] {"dobon\\.net"}; webreq.Proxy = new System.Net.WebProxy("http://localhost:8080", true ,bypassUrls);
Internet Exploreの設定(コントロールパネルの「インターネットのプロパティ」の設定)を使用するには、WebRequest.GetSystemWebProxyメソッドを使用します。ただし.NET Framework 1.1以前では、WebProxy.GetDefaultProxyメソッドを使用します。
'IEの設定を使用する webreq.Proxy = System.Net.WebRequest.GetSystemWebProxy() '.NET Framework 1.1以前では、次のようにする 'webreq.Proxy = System.Net.WebProxy.GetDefaultProxy()
//IEの設定を使用する webreq.Proxy = System.Net.WebRequest.GetSystemWebProxy(); //.NET Framework 1.1以前では、次のようにする //webreq.Proxy = System.Net.WebProxy.GetDefaultProxy();
プロキシを使用しないようにするには、Proxyプロパティにnullを設定します。ただし.NET Framework 1.1以前では、GlobalProxySelection.GetEmptyWebProxyプロパティを使用します。
'プロキシを使用しない webreq.Proxy = Nothing '.NET Framework 1.1以前では、次のようにする 'webreq.Proxy = System.Net.GlobalProxySelection.GetEmptyWebProxy()
//プロキシを使用しない webreq.Proxy = null; //.NET Framework 1.1以前では、次のようにする //webreq.Proxy = System.Net.GlobalProxySelection.GetEmptyWebProxy();
プロキシサーバーに認証が必要な場合は、WebProxyコンストラクタの4番目のパラメータにICredentialsを指定します。または、WebProxy.Credentialsプロパティを設定します。
Dim proxy As New System.Net.WebProxy("http://localhost:8080") 'ユーザー名とパスワードを設定 proxy.Credentials = New System.Net.NetworkCredential("name", "pass") webreq.Proxy = proxy
System.Net.WebProxy proxy = new System.Net.WebProxy("http://localhost:8080"); //ユーザー名とパスワードを設定 proxy.Credentials = new System.Net.NetworkCredential("name", "pass"); webreq.Proxy = proxy;
WebRequest.DefaultWebProxyプロパティにプロキシの設定を格納すると、Proxyの設定がされていないすべてのWebRequest(.NET Framework 4.5時点で、FtpWebRequestとHttpWebRequest)で使用されるようになります。WebClientクラスでも内部ではWebRequestを使用していますので、このように設定したプロキシが使われるようになるでしょう。
元々のDefaultWebProxyプロパティが返す設定は、app.configなどの構成ファイルの設定(後述します)です。構成ファイルに設定がない場合は、Internet Explorerの設定を使用します(.NET Framework 2.0以降)。
なお.NET Framework 1.1以前では、DefaultWebProxyプロパティの代わりにGlobalProxySelection.Selectプロパティを使用します。
'グローバルプロキシの設定 Dim proxy As New System.Net.WebProxy("http://localhost:8080") System.Net.WebRequest.DefaultWebProxy = proxy '.NET Framework 1.1以前では、次のようにする 'System.Net.GlobalProxySelection.Select = proxy
//グローバルプロキシの設定 System.Net.WebProxy proxy = new System.Net.WebProxy("http://localhost:8080"); System.Net.WebRequest.DefaultWebProxy = proxy; //.NET Framework 1.1以前では、次のようにする //System.Net.GlobalProxySelection.Select = proxy;
アプリケーション構成ファイル(app.config)やマシン構成ファイル(machine.config)などに、プロキシの設定を記述しておくことができます。なお、アプリケーション構成ファイルに関して詳しくは、こちらをご覧ください。
例えば以下のような記述をアプリケーション構成ファイルに書き込むことにより、デフォルトで、"http://localhost:8080"のプロキシを使用し、ローカルアドレスと、"dobon.net"をバイパスするようになります。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.net> <defaultProxy> <proxy proxyaddress="http://localhost:8080" bypassonlocal="True" /> <bypasslist> <add address="dobon\.net" /> </bypasslist> </defaultProxy> </system.net> </configuration>
構成ファイルに記述できる設定について詳しくは、MSDNの「<defaultProxy> 要素 (ネットワーク設定)」をご覧ください。