この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#のIDE:Visual 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でプロジェクトフォルダーを開きます:
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プロジェクトの /ip
GETエンドポイントに接続します。このAPIは呼び出し元のIPアドレスを返すので、プロキシ統合が期待通りに動くかどうかをチェックするのに最適なターゲットとなる。その理由は?プロキシをHttpClient
に統合すると、/ip
エンドポイントから返される IP は元の IP とは異なるものになります。
スクリプトを実行すると、出力は次のようになるはずだ:
{
"origin": "55.17.80.196"
}
originに
含まれるIPアドレスは、あなたの出口IPを表しています。
驚いた!有効なプロキシURLを取得する時が来た。
ステップ3:プロキシの取得
プロキシをHttpClientに
統合するには、まずプロキシサーバーにアクセスする必要があります。
多くのオンラインポータルが無料のプロキシURLを提供しているが、プロキシインフラの運用にはコストがかかるので注意が必要だ。無料プロキシを提供しているサービスがある場合、そのビジネスモデルがどのようなものかを考えてみてください。多くの場合、彼らはデータを盗んだり、その他の疑わしい行為に従事しています。
そのため、フリーのプロキシは学習目的にのみ使用し、本番での使用は避けたほうがよい!
信頼できるプロキシが必要な場合は、無料トライアルまたは限定無料プランを提供している評判の良いプロバイダーをご検討ください。例えば、当社の無料プロキシをお試しください。
さて、典型的なプロキシのURLは次のような形式である:
<protocol>://<host>:<port>
どこでだ:
protocolは
プロキシの種類を指定する(http
、https
、socks5など
)。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
では、プロキシ認証はWebProxy
のCredentials
プロパティを使用して処理されます。このプロパティは、以下のように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アドレスをブロックしてしまうかもしれません。それを避けるには、リクエストごとにプロキシサーバーをローテーションさせ、毎回異なるプロキシサーバーを使うようにします。
プロキシローテーションを実行するには、次の手順に従います。
- 多数のプロキシURLでリストを作成する
- 各リクエストの前にプロキシURLをランダムに選ぶ
- 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人以上のお客様にサービスを提供しています。この世界的なプロキシネットワークには以下が含まれます:
- データセンター・プロキシ– 770,000以上のデータセンターIP。
- レジデンシャル・プロキシ– 195カ国以上、7200万以上のレジデンシャルIP。
- ISPプロキシ– 70万以上のISP IP。
- モバイルプロキシ– 7M以上のモバイルIP。
以下の手順で、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以外にはありません。
アカウントを作成し、今すぐ当社のプロキシを無料でお試しください!
クレジットカードは必要ありません