PHPでプロキシを使用する方法 (2025)
このガイドでは、cURLを使用してPHPでプロキシを設定する方法を示します。また、プロキシ認証の処理、セキュリティ向上のためのプロキシのローテーション、Bright Dataのような信頼性の高いプレミアムプロキシの使用についても説明します。それでは、ウェブスクレイピングをよりスムーズで匿名性の高いものにするために、さっそく始めましょう!
PHPでのプロキシの設定
まず、PHPのcURLライブラリを使用して基本的なプロキシを設定する方法を見てみましょう。このためには、公開プロキシリストから無料のプロキシを取得できます。無料のプロキシは信頼性が低く、いつでも動作を停止する可能性があることに注意してください。
ステップ1: スクレイパー関数の作成
まず、cURLリクエストを設定し、プロキシを構成するPHPスクリプトを作成します。以下はその例です:
<?php
function scraper() {
// Initialize cURL
$curl = curl_init();
// Set the target URL
curl_setopt($curl, CURLOPT_URL, "https://httpbin.org/ip");
// Set the proxy address
curl_setopt($curl, CURLOPT_PROXY, "http://50.223.246.237:80");
// Set options to receive the response as a string
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// Follow redirects
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
// Execute the cURL request
$html = curl_exec($curl);
// Display the response
echo $html;
// Catch errors if any
if (curl_errno($curl)) {
echo 'cURL error: ' . curl_error($curl);
}
// Close the cURL session
curl_close($curl);
}
// Run the function
scraper();
?>
出力
出力には、リクエストに使用されているプロキシIPが表示されます:
{"origin": "50.223.246.237"}
「CONNECT tunnel failed」のようなエラーが表示された場合、それは無料のプロキシが信頼性が低いためです。その場合は、リストから別のプロキシを使用してください。
PHPでのプロキシ認証
多くの 有料プロキシサービス では、プロキシを使用する前に認証が必要です。認証するには、cURLリクエストにプロキシのユーザー名とパスワードを含める必要があります。
以下は、PHPでプロキシを認証する方法の例です:
<?php
function scraper() {
// Initialize cURL
$curl = curl_init();
// Set the target URL
curl_setopt($curl, CURLOPT_URL, "https://httpbin.org/ip");
// Set the proxy address
curl_setopt($curl, CURLOPT_PROXY, "http://54.37.214.253:8080");
// Provide the proxy credentials
curl_setopt($curl, CURLOPT_PROXYUSERPWD, "username:password");
// Set options to return the response as a string
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// Follow redirects
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
// Execute the cURL request
$html = curl_exec($curl);
// Display the response
echo $html;
// Catch errors if any
if (curl_errno($curl)) {
echo 'cURL error: ' . curl_error($curl);
}
// Close the cURL session
curl_close($curl);
}
// Run the function
scraper();
?>
間違ったユーザー名またはパスワードを入力すると、407エラーが表示されます。資格情報を再確認して、もう一度試してください。
PHPでのプロキシのローテーション
検出やブロックを避けるために、プロキシのローテーションは優れた方法です。この技術は、複数のプロキシを使用し、各リクエストごとにローテーションさせます。これにより、各リクエストが異なる場所から来ているように見え、IP禁止やレート制限を回避するのに役立ちます。
以下は、PHPでプロキシローテーションを実装する方法です:
<?php
// プロキシ回転機能
function proxyRotator($proxy_list) {
// リストからランダムなプロキシを選択
return $proxy_list[array_rand($proxy_list)];
}
function scraper() {
// プロキシのリスト
$proxies = [
'http://203.115.101.51:82',
'http://50.207.199.82:80',
'http://188.68.52.244:80',
];
// リストからランダムなプロキシを取得
$proxy = proxyRotator($proxies);
// cURLを初期化
$curl = curl_init();
// 対象URLを設定
curl_setopt($curl, CURLOPT_URL, "https://httpbin.org/ip");
// プロキシアドレスを設定
curl_setopt($curl, CURLOPT_PROXY, $proxy);
// レスポンスを文字列として返すオプションを設定
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// リダイレクトを追跡
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
// cURLリクエストを実行
$html = curl_exec($curl);
// レスポンスを表示
echo $html;
// エラーをキャッチ
if (curl_errno($curl)) {
echo 'cURL error: ' . curl_error($curl);
}
// cURLセッションを閉じる
curl_close($curl);
}
// 関数を実行
scraper();
?>
出力は各リクエストごとに異なるIPアドレスを表示し、プロキシ回転が機能していることを確認します:
{"origin": "188.68.52.244"}
無料のプロキシはテストには適していますが、失敗率が高く、大規模な操作には適していません。信頼性のあるスクレイピングには、プレミアムプロキシを使用するのが最良です。
信頼性のためのプレミアムプロキシの使用
Bright DataやDecodoのようなプレミアムプロキシは、高度に信頼できる住宅IPを提供します。これらのプロキシは、実際のユーザーのデバイスに関連付けられているため、フラグが立てられる可能性が低くなります。Bright DataとDecodoは、地理的制限を回避し、検出を避けるのに役立つ地理位置情報やプロキシ回転の機能も提供しています。
データジャーナルのストーリーを受信箱で受け取る
この作家からの更新を受け取るために、Mediumに無料で参加してください。
以下は、Bright Dataの住宅プロキシをPHPで統合する方法の例です:
<?php
function scraper() {
// cURLを初期化
$curl = curl_init();
// 対象URLを設定
curl_setopt($curl, CURLOPT_URL, "https://httpbin.org/ip");
// プロキシアドレスを設定 (Bright Data)
curl_setopt($curl, CURLOPT_PROXY, "http://your_proxy_address");
// Bright Dataの資格情報を提供
curl_setopt($curl, CURLOPT_PROXYUSERPWD, "your_username:your_password");
// レスポンスを文字列として返すオプションを設定
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// リダイレクトを追跡
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
// cURLリクエストを実行
$html = curl_exec($curl);
// レスポンスを表示
echo $html;
// エラーをキャッチ
if (curl_errno($curl)) {
echo 'cURL error: ' . curl_error($curl);
}
// cURLセッションを閉じる
curl_close($curl);
}
// 関数を実行
scraper();
?>
プロキシ使用のベストプラクティス
スクレイパーが効率的に動作し、検出されないようにするために、以下のベストプラクティスを心に留めておいてください:
- IPを回転させる: 回転プロキシを使用して検出を避けます。大量のデータをスクレイピングする場合、これは重要です。
- 適切なヘッダーを使用する: リクエストヘッダーとしてUser-Agentを設定し、リクエストが通常のWebトラフィックのように見えるようにします。
- リクエスト速度を制御する: あまりにも多くのリクエストを急速に送信すると検出される可能性があります。リクエスト間に遅延を実装するか、再試行のために指数バックオフを使用します。
- 倫理的であること: サイトのrobots.txtファイルのルールに従い、サイトの利用規約に違反するデータのスクレイピングを避けます。
結論
PHPでプロキシを設定するのは簡単で、データをスクレイピングする際にIP禁止を回避するのに役立ちます。テストのために無料のプロキシを使用する場合でも、信頼性を高めるためにBright Dataのようなプレミアムプロキシを使用する場合でも、プロキシは真剣なWebスクレイパーには必須です。プロキシを回転させ、認証を処理し、ベストプラクティスに従うことで、安全かつ効率的にウェブサイトをスクレイピングできるようになります。
