C#で.NETのHttpClientを使用してプロキシを設定する方法

このステップバイステップのガイドで、C# HttpClient プロキシ統合をマスターしましょう。セキュアな Web リクエストのためのセットアップ、認証、SSL 処理、IP ローテーションについて学びます。
5 分読
How to Set a Proxy Using HttpClient blog image

このHttpClient C#プロキシ統合ガイドが終わるころには、あなたは知っているでしょう:

  • HttpClientとは何か、.NETでHTTPリクエストを行う際の役割
  • C#でプロキシを使うべき理由
  • HttpClientでプロキシを設定する方法
  • HttpClientでプロキシ認証、SSL証明書エラー、IPローテーションを処理する方法。

さあ、飛び込もう!

.NETのHttpClientとは?

HttpClientは、.NETでHTTPリクエストを作成し、HTTPレスポンスを受信するためのクラスです。System.Net.Http名前空間の一部であり、.NET、つまりC#のデフォルトHTTPクライアントを表します。

HttpClient がサポートしています:

  • GET、POST、PUT、PATCH、DELETEを含むすべてのHTTPメソッド
  • 非同期通信
  • ヘッダーとクッキーのカスタマイズ
  • ボディのカスタマイズを依頼する
  • プロキシ統合

これらの特徴と、.NET標準ライブラリでの公式サポートにより、HttpClientはC#でのHTTPリクエストのための一般的な選択肢となっている。

C# HttpClientでプロキシを設定する理由

ウェブスクレイピングやデータ収集など、インターネットに関連する作業を行う場合、オンライン上の身元を保護することが重要です。それを実現する一つの方法は、プロキシサーバーを経由してトラフィックをルーティングすることです。

プロキシサーバーは、あなたと目的地サイトとの間の仲介役として機能し、HttpClientにこれらの利点を提供します:

  • 隠されたIPと場所:宛先サーバーは、あなたのIPではなく、プロキシのIPを見ます。
  • 機密性の向上:プロキシは、あなたの身元を隠し、追跡を困難にすることで、プライバシーのレイヤーを追加します。
  • IPバンを回避:プロキシは、C#を使ったウェブスクレイピングの基本であるレート制限を回避するのに役立ちます。
  • 地域制限を回避特定の地域に設置されたプロキシサーバーを利用して、自宅から地域制限のあるコンテンツにアクセスすることができます。

したがって、HttpClientでプロキシを使用すると、オンライン・セキュリティが向上するだけでなく、スクレイピング作業の信頼性も向上する。

C#でHttpClientを使用してプロキシを設定します:ステップバイステップガイド

C#を使用して.NETのHttpClientでプロキシを統合する方法については、以下の手順に従ってください。

前提条件

始める前に、以下の前提条件を満たしていることを確認してください:

  • C#のIDEVisual StudioまたはVisual Studio Codeのいずれかを使用できます。このガイドでは、C#拡張機能付きのVisual Studio Codeを使用します。
  • .NET 8+がローカルにインストールされていること:.NETの最新バージョン、または.NET 8以上のLTSバージョンが必要です。このチュートリアルでは.NET 9を使用します。

必要なツールをお持ちでない場合は、上記のリンクからダウンロードし、インストールウィザードに従ってください。

ステップ1:プロジェクトのセットアップ

.NETプロジェクト用に新しいフォルダーを作成し、ターミナルで以下のコマンドを実行してそのフォルダーに移動する:

mkdir httpclient-proxy
cd httpclient-proxy

次に、その中で新しい.NETコンソール・アプリケーションを初期化する:

dotnet run console

出力はこうなるはずだ:

The template "Console App" was created successfully.

次に、IDEでプロジェクトフォルダーを開きます:

C#プロジェクトのProgram.cs

Program.csが最も重要です。現在、このファイルには単純な “Hello, World!”スクリプトが含まれています。このセクションの最後では、C# HttpClientプロキシ統合スクリプトになります。

すべてが期待通りに動くことを確認するために、C#アプリケーションを次のように起動してみる:

dotnet run

結果はこうなるはずだ:

Hello, World!

素晴らしい!これでVisual Studio Codeで動くC#プロジェクトができました。

ステップ2: HttpClientのセットアップ

Program.csに以下のコードを追加し、 HttpClientを使ってリクエストを送信する:

using System.Net;

class Program
{
  static async Task Main()
  {
    // initialize an HttpClient instance
    using HttpClient client = new HttpClient();

    // the target URL
    string url = "https://httpbin.org/ip";

    // send an async GET request to the endpoint
    HttpResponseMessage response = await client.GetAsync(url);

    // read the response content as a string
    string responseBody = await response.Content.ReadAsStringAsync();

    // print the response to the console
    Console.WriteLine(responseBody);
  }
}

このスニペットはHttpClientインスタンスを初期化し、そのGetAsync()メソッドを使用してHTTPBin.ioプロジェクトの /ipGETエンドポイントに接続します。このAPIは呼び出し元のIPアドレスを返すので、プロキシ統合が期待通りに動くかどうかをチェックするのに最適なターゲットとなる。その理由は?プロキシをHttpClient に統合すると、/ipエンドポイントから返される IP は元の IP とは異なるものになります。

スクリプトを実行すると、出力は次のようになるはずだ:

{
  "origin": "55.17.80.196"
}

originに含まれるIPアドレスは、あなたの出口IPを表しています。

驚いた!有効なプロキシURLを取得する時が来た。

ステップ3:プロキシの取得

プロキシをHttpClientに統合するには、まずプロキシサーバーにアクセスする必要があります。

多くのオンラインポータルが無料のプロキシURLを提供しているが、プロキシインフラの運用にはコストがかかるので注意が必要だ。無料プロキシを提供しているサービスがある場合、そのビジネスモデルがどのようなものかを考えてみてください。多くの場合、彼らはデータを盗んだり、その他の疑わしい行為に従事しています。

そのため、フリーのプロキシは学習目的にのみ使用し、本番での使用は避けたほうがよい!

信頼できるプロキシが必要な場合は、無料トライアルまたは限定無料プランを提供している評判の良いプロバイダーをご検討ください。例えば、当社の無料プロキシをお試しください。

さて、典型的なプロキシのURLは次のような形式である:

<protocol>://<host>:<port>

どこでだ:

  • protocolはプロキシの種類を指定する(httphttpssocks5など)。
  • host: プロキシサーバーのドメインまたはIPアドレス
  • ポート:トラフィックがルーティングされるポート番号

この例では、プロキシURLを次のように仮定する:

http://66.29.154.103:3128

それをProgram.csの変数に格納する:

string proxyUrl = "http://66.29.154.103:3128";

HttpClientでプロキシを使う方法を見てみよう!

ステップ4:プロキシの統合

HttpClientでは、HttpClientHandlerクラスを通してプロキシを指定することができます。これは、HttpClientインスタンスによって送信されるHTTPリクエストに対する低レベルの制御を提供します。

特に、HttpClientHandlerには Proxyプロパティがあり、プロキシサーバー設定を含むWebProxyオブジェクトを受け取ります:

WebProxy proxy = new WebProxy
{
  Address = new Uri(proxyUrl),
};

次に、プロキシを HttpClientHandlerインスタンスに渡す:

HttpClientHandler handler = new HttpClientHandler
{
    Proxy = proxy,
};

そして最後に、HttpClientコンストラクタにHttpClientHandlerを渡す:

using HttpClient client = new HttpClient(handler);

すばらしい!HttpClient C#プロキシ統合完了。

ステップ5:すべてをまとめる

最終的なHttpClientプロキシ統合スクリプトには、以下の内容を含める必要があります:

using System.Net;

class Program
{
  static async Task Main()
  {
    // initialize a new proxy object
    string proxyUrl = "http://66.29.154.103:3128"; // replace with a valid proxy URL
    WebProxy proxy = new WebProxy
    {
      Address = new Uri(proxyUrl),
    };

    // define an HTTP client handler with the given proxy
    HttpClientHandler handler = new HttpClientHandler
    {
      Proxy = proxy,
    };

    // initialize an HttpClient instance with proxy integration
    using HttpClient client = new HttpClient(handler);

    // the target URL
    string url = "https://httpbin.org/ip";

    // send an async GET request to the endpoint
    HttpResponseMessage response = await client.GetAsync(url);

    // read the response content as a string
    string responseBody = await response.Content.ReadAsStringAsync();

    // print the response to the console
    Console.WriteLine(responseBody);
  }
}

スクリプトを実行する:

dotnet run

結果はこうなるはずだ:

{
  "origin": "66.29.154.103"
}

ipエンドポイントからのレスポンスのorigin属性がプロキシサーバーのIPアドレスを表示していることに注意してください。これは、あなたの本当のIPがプロキシの後ろにうまく隠されていることを確認します。

警告無料のプロキシサーバーはたいてい短命で信頼できません。このガイドを読む頃には、選択したプロキシは動作しなくなっているでしょう。コードをテストするには、スクリプトを実行する前にproxyUrl を有効で動作するプロキシの URL に置き換えてください。

HttpClientプロキシ統合の高度な使用例

C#でHttpClientを使ったプロキシ統合の基本を学びましたが、他にも考慮すべき高度なシナリオがあります。

プロキシ認証

プレミアムプロキシは、認可されたユーザーにアクセスを制限するために認証で保護されている。特に、認証されたプロキシのURLは次のような形式になっています:

<protocol>://<username>:<password>@<host>:<port>

ここで、ユーザー名と パスワードは認証に使用される認証情報である。

HttpClient では、プロキシ認証はWebProxyCredentialsプロパティを使用して処理されます。このプロパティは、以下のようにNetworkCredentialオブジェクトを受け入れます:

WebProxy proxy = new WebProxy
{
  Address = new Uri(proxyUrl),
  // specify proxy authentication
  Credentials = new NetworkCredential("<username>", "<password>"),
};

抜粋 を抜き出し、上記のコードで置き換えてください。

つまり、認証されたプロキシを統合するコードは次のようになる:

using System.Net;

class Program
{
  static async Task Main()
  {
    // initialize a new proxy object
    string proxyUrl = "<protocol>://<host>:<port>";
    WebProxy proxy = new WebProxy
    {
      Address = new Uri(proxyUrl),
      // specify proxy authentication
      Credentials = new NetworkCredential("<username>", "<password>"),
    };

    // define an HTTP client handler with the given proxy
    HttpClientHandler handler = new HttpClientHandler
    {
      Proxy = proxy,
    };

    // initialize an HttpClient instance with authenticated proxy integration
    using HttpClient client = new HttpClient(handler);

    // the target URL
    string url = "https://httpbin.org/ip";

    // send an async GET request to the endpoint
    HttpResponseMessage response = await client.GetAsync(url);

    // read the response content as a string
    string responseBody = await response.Content.ReadAsStringAsync();

    // print the response to the console
    Console.WriteLine(responseBody);
  }
}

SSL証明書の問題を避ける

HttpClientでプロキシを設定すると、以下のSSL証明書の検証エラーによりリクエストが失敗することがあります:

Unhandled exception. System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exception.
 ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot

これは通常、プロキシが自己署名SSL証明書を使用している場合に起こる。

プロキシサーバーを信頼している場合、そしてそのシナリオに限って言えば、以下の方法でSSL検証を無効にして、この問題を回避することができる:

HttpClientHandler handler = new HttpClientHandler();
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.ServerCertificateCustomValidationCallback = (httpRequestMessage, cert, cetChain, policyErrors) =>
{
  return true;
};

using HttpClient client = new HttpClient(handler);

上記のスニペットは、常にtrueを返すカスタム・コールバックで、デフォルトの証明書検証動作をオーバーライドします。

:SSL検証を無効にすると、接続がMITM(中間者)攻撃に対して脆弱になります。プロキシを完全に信頼し、セキュリティリスクを認識している場合にのみ、この方法を使用してください。

プロキシ・ローテーションの実装

同じプロキシサーバーに何度も頼っていると、ターゲットサイトは最終的にそのIPアドレスをブロックしてしまうかもしれません。それを避けるには、リクエストごとにプロキシサーバーをローテーションさせ、毎回異なるプロキシサーバーを使うようにします。

プロキシローテーションを実行するには、次の手順に従います。

  1. 多数のプロキシURLでリストを作成する
  2. 各リクエストの前にプロキシURLをランダムに選ぶ
  3. HttpClientに選択したプロキシURLを設定する。

上記のアルゴリズムは以下のスニペットに変換される:

using System.Net;

class Program
{  
  static async Task Main()
  {
    // get a random proxy URL
    string selectedProxyUrl = GetRandomProxyUrl();

    // configure the random proxy
    HttpClientHandler handler = new HttpClientHandler
    {
      Proxy = new WebProxy
      {
        Address = new Uri(selectedProxyUrl),
      },
    };

    // perform a GET request through the random proxy
    using HttpClient client = new HttpClient(handler);
    string url = "https://httpbin.org/ip";
    HttpResponseMessage response = await client.GetAsync(url);

    // read the response content as a string and print it
    string responseBody = await response.Content.ReadAsStringAsync();
    Console.WriteLine(responseBody);
  }

  static string GetRandomProxyUrl()
  {
    // the list of proxy URL to rotate from
    List<string> proxyUrls = new List<string>
        {
            "<protocol_1>://<proxy_host_1>:<port_1>",
            // ...
            "<protocol_n>://<proxy_host_n>:<port_n>",
        };

    // return a random proxy URL from the list
    Random random = new Random();
    int index = random.Next(proxyUrls.Count);
    return proxyUrls[index];
  }
}

この方法の主な欠点は以下の通りである:

  • 定型的なコードを含む
  • 信頼できるプロキシサーバーのプールにアクセスする必要があり、それには通常コストがかかる。

幸運なことに、C#でIPアドレスをローテーションする、より効率的なソリューションがある!

Bright Dataは、出口IPアドレスを自動的にローテーションするローテーションプロキシーを提供し、手動によるプロキシーローテーションの必要性を排除します。約1億のIPを誇り、195カ国で利用可能で、卓越したネットワークアップタイムを持ち、99.9%の成功率を保証しています。

次の章では、Bright Dataの回転プロキシをHttpClientで使い始める方法を学びます。

HttpClientでBright Data Proxyを使用する

Bright Dataは、世界最大級のプロキシサーバーを運営し、フォーチュン500社、20,000人以上のお客様にサービスを提供しています。この世界的なプロキシネットワークには以下が含まれます:

以下の手順で、C#のHttpClientでBright Dataの住宅用プロキシを使用する方法を学びます。

すでにアカウントをお持ちの方は、Bright Dataにログインしてください。アカウントをお持ちでない場合は、無料でアカウントを作成してください。ログインすると、ユーザーダッシュボードが表示されます:

ログイン後のブライト・データのダッシュボード

プロキシ製品を見る」ボタンをクリックして次に進みます:

プロキシ製品を見るをクリック

プロキシとスクレイピング・インフラストラクチャ」ページにリダイレクトされます:

プロキシ&スクレイピング・インフラストラクチャーのメインページ

下にスクロールして、”Residential Proxies “カードを見つける。開始」ボタンをクリックしてください:

住宅用プロキシを始める

レジデンシャル・プロキシ設定ページでは、ウィザードに従ってお客様のニーズに合わせてサービスをカスタマイズしてください。ご不明な点がございましたら、年中無休のサポートまでお気軽にお問い合わせください:

お客様のニーズに合わせたサービスのカスタマイズ

Access parameters “タブでプロキシのホスト、ポート、ユーザー名、パスワードを取得する:

新しいゾーンのアクセスパラメータ

Host “フィールドにはポートも含まれることに注意。

必要な詳細がわかったところで、プロキシURLを作成し、C#のWebProxyオブジェクトで使用します:

WebProxy proxy = new WebProxy
{
  Address = new Uri("http://<brightdata_proxy_host>:<brightdata_proxy_port>"),
  Credentials = new NetworkCredential("<brightdata_proxy_username>", "<brightdata_proxy_password>"),
};

プレースホルダを プレースホルダを Bright Data のプロキシ情報に置き換えてください。

アクティブ・プロキシ」設定を切り替え、残りの指示に従えば設定は完了です!

以下のC#コードスニペットを使用して、Bright DataのプロキシをHttpClientに統合します:

using System.Net;

class Program
{
  static async Task Main()
  {
    // initialize a new proxy object
    WebProxy proxy = new WebProxy
    {
      // TODO: replace the placeholders with your Bright Data's proxy info
      Address = new Uri("http://<brightdata_proxy_host>:<brightdata_proxy_port>"),
      Credentials = new NetworkCredential("<brightdata_proxy_username>", "<brightdata_proxy_password>"),
    };

    // define an HTTP client handler with the given proxy
    HttpClientHandler handler = new HttpClientHandler
    {
      Proxy = proxy,
    };

    // disable SSL verification
    handler.ClientCertificateOptions = ClientCertificateOption.Manual;
    handler.ServerCertificateCustomValidationCallback = (httpRequestMessage, cert, cetChain, policyErrors) =>
    {
      return true;
    };

    // initialize an HttpClient instance with proxy integration
    using HttpClient client = new HttpClient(handler);

    // the target URL
    string url = "https://httpbin.org/ip";

    // send an async GET request to the endpoint
    HttpResponseMessage response = await client.GetAsync(url);

    // read the response content as a string
    string responseBody = await response.Content.ReadAsStringAsync();

    // print the response to the console
    Console.WriteLine(responseBody);
  }
}

上記のスクリプトを実行するたびに、異なる終了IPが表示されます。

Bright Dataの自動回転プロキシにより、HttpClientのプロキシローテーションがかつてないほど簡単になりました!

結論

このプロキシ統合チュートリアルでは、プロキシを使用することが重要な理由と、C#のHttpClientと統合する方法を学びました。.NETのデフォルトのHTTPクライアント・ライブラリであるHttpClientでプロキシをセットアップするのがいかに簡単かを発見したことでしょう。

このガイドを通して、あなたはまた、なぜ無料のプロキシサービスに頼ることが危険であるかを理解しました。代わりに、評判の良いプロキシプロバイダの信頼できるプロキシを使用する必要があります。そして、市場で最高の回転プロキシプロバイダといえば、Bright Data以外にはありません。

アカウントを作成し、今すぐ当社のプロキシを無料でお試しください!

クレジットカードは必要ありません