DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

プロキシサーバーを指定してダウンロードする

個々のWebRequestで使用するプロキシを設定する

WebRequest.ProxyプロパティにWebProxyオブジェクトを設定することにより、プロキシサーバーを指定できます。プロキシサーバーに「localhost:8080」を指定する例を以下に示します。

VB.NET
コードを隠すコードを選択
'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()
C#
コードを隠すコードを選択
//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で使用するプロキシを設定できます。

バイパスを設定する

WebProxyコンストラクタの2番目のパラメータにTrueを指定すると、ローカルアドレスのプロキシをバイパスする(プロキシを通さずに、直接アクセスする)ようになります(または、WebProxy.BypassProxyOnLocalプロパティをTrueにします)。また、WebProxyコンストラクタの3番目のパラメータに、バイパスするURIの正規表現パターンを文字列の配列で指定できます(または、WebProxy.BypassListプロパティを設定します)。

VB.NET
コードを隠すコードを選択
'ローカルと"dobon.net"をバイパスする
Dim bypassUrls() As String = {"dobon\.net"}
webreq.Proxy = _
    New System.Net.WebProxy("http://localhost:8080", True, bypassUrls)
C#
コードを隠すコードを選択
//ローカルと"dobon.net"をバイパスする
string[] bypassUrls = new string[] {"dobon\\.net"};
webreq.Proxy =
    new System.Net.WebProxy("http://localhost:8080", true ,bypassUrls);

Internet Exploreの設定を使用する

Internet Exploreの設定を使用するには、WebProxy.GetDefaultProxyメソッドを使用します。

VB.NET
コードを隠すコードを選択
'IEの設定を使用する
webreq.Proxy = System.Net.WebProxy.GetDefaultProxy()
C#
コードを隠すコードを選択
//IEの設定を使用する
webreq.Proxy = System.Net.WebProxy.GetDefaultProxy();

プロキシを使用しないようにする

次のように、GlobalProxySelection.GetEmptyWebProxyプロパティを使用します。

VB.NET
コードを隠すコードを選択
'プロキシを使用しない
webreq.Proxy = System.Net.GlobalProxySelection.GetEmptyWebProxy()
C#
コードを隠すコードを選択
//プロキシを使用しない
webreq.Proxy = System.Net.GlobalProxySelection.GetEmptyWebProxy();

プロキシ認証

プロキシサーバーに認証が必要な場合は、WebProxyコンストラクタの4番目のパラメータにICredentialsを指定します。または、WebProxy.Credentialsプロパティを設定します。

VB.NET
コードを隠すコードを選択
Dim proxy As New System.Net.WebProxy("http://localhost:8080")
'ユーザー名とパスワードを設定
proxy.Credentials = New System.Net.NetworkCredential("name", "pass")
webreq.Proxy = proxy
C#
コードを隠すコードを選択
System.Net.WebProxy proxy =
    new System.Net.WebProxy("http://localhost:8080");
//ユーザー名とパスワードを設定
proxy.Credentials = new System.Net.NetworkCredential("name", "pass");
webreq.Proxy = proxy;

すべてのWebRequestで使用するプロキシを設定する

GlobalProxySelection.Selectメソッドにプロキシの設定を格納すると、Proxyの設定がされていないすべてのWebRequestで使用されるようになります。WebClientクラスでも内部ではWebRequestを使用していますので、このように設定したプロキシが使われるようになるでしょう

VB.NET
コードを隠すコードを選択
Dim proxy As New System.Net.WebProxy("http://localhost:8080")
System.Net.GlobalProxySelection.Select = proxy
C#
コードを隠すコードを選択
System.Net.WebProxy proxy =
    new System.Net.WebProxy("http://localhost:8080");
System.Net.GlobalProxySelection.Select = proxy;

アプリケーション構成ファイルにプロキシの設定を記述する

アプリケーションやコンピュータ構成ファイルに、プロキシの設定を記述しておくことができます。ここに記述された設定は、先に紹介したGlobalProxySelectionクラスによって返されるプロキシの設定として使用されます。なお、アプリケーション構成ファイルに関しては、こちらをご覧ください。

以下のような記述をアプリケーション構成ファイルに書き込むことにより、デフォルトで、"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>
  • 履歴:
  • 2006/11/20 プロキシ認証や、バイパスするURIの指定法を追加。
  • 2007/1/20 .NET Framework 2.0のWebClientに関する情報を追加。
  • 2007/1/24 「アプリケーション構成ファイルにプロキシの設定を記述する」を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。