HTTP要求は、クローラープロジェクトで非常に一般的な運用です。大量のデータをrawっている間に毎回新しい接続を確立する必要がある場合、特にターゲットWebサイトにリクエストに特定の頻度制限がある場合、効率に影響を与える可能性があります。このプロセスを最適化するには、長い間接続を開いたままにしておくことが特に重要です。 PHPでは、 curl_upkeep()メソッドを使用して接続の持続性を維持し、頻繁に新しい接続を回避できます。
curl_upkeep()は、通常、PHPのCurlライブラリを介してHTTPリクエストを送信するときに接続が閉じないようにするために使用されるカスタム関数です。 curl_upkeep()を使用する場合、特にクローラーが継続的にリクエストを送信する必要がある場合、リクエストを送信するたびに接続の再確立を避けることができます。
PHPでは、 Curlを使用してHTTPリクエストを実行する場合、通常、閉じているデフォルトの接続に遭遇します。要求するたびに接続が再確立されないようにするには、接続をアクティブに保つために関連するパラメーターを設定する必要があります。
Curl_upkeep()を使用して接続を開いたままにする方法を示す例を示します。
<?php
function curl_upkeep($url)
{
$ch = curl_init();
// 設定cURLオプション
curl_setopt($ch, CURLOPT_URL, $url); // ターゲットURL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 直接出力の代わりに応答コンテンツを返します
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 自動ジャンプを許可します
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Connection: keep-alive", // つながりを保ちます
"Keep-Alive: 300", // 設定超时时间,秒単位のユニット
));
// 設定一个较长的超时,接続が閉じられないようにしてください
curl_setopt($ch, CURLOPT_TIMEOUT, 300); // 設定请求超时时间为5分
// 埋め込むcURLリクエストと結果を取得します
$response = curl_exec($ch);
if(curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
curl_close($ch);
return $response;
}
// 使用curl_upkeep()リクエストを行います
$url = "https://m66.net/api/data"; // ターゲットURL置き換えますm66.net
$response = curl_upkeep($url);
echo $response;
?>
curl_init() :curlセッションを初期化します。
curl_setopt() :curlオプションを設定します。これは、 curlopt_urlがターゲットURLを指定する場合、 curlopt_returntransferは直接出力の代わりに応答コンテンツを返すようにし、 curlopt_followlocationはリダイレクト後に自動的に意味します。
接続を維持する:接続を通して:維持することとキープアライブヘッダーパラメーター、接続がアクティブのままであることを指定します。
タイムアウト設定: curlopt_timeoutパラメーターを使用して、長いタイムアウトを設定して、サーバーによって接続が閉じられないようにします。
クローラープロジェクトでは、接続の頻繁な設立と閉鎖により、不必要なオーバーヘッドが増加し、効率が低下します。つながりを維持することで、次のことができます。
パフォーマンスの向上:毎回新しい接続を確立することなく、既存の接続を再利用し、遅延を減らします。
禁止を防ぐ:一部のターゲットWebサイトでは、同じIPへのアクセスの頻度を制限する場合があります。接続を維持することにより、接続の数を減らし、アンチクローラーメカニズムをトリガーできます。
リソースの保存:接続を確立するには、時間とリソースが必要です。接続を維持すると、サーバーとクライアントのコンピューティングリソースを節約できます。
タイムアウト:適切なタイムアウトを設定することが非常に重要です。タイムアウトの設定が長すぎると、リクエストが長すぎる可能性があります。一般的に言えば、実際のニーズに応じて合理的なタイムアウトを設定することをお勧めします。
接続制限:一部のサーバーには、永続的な接続(接続の最大数など)に特定の制限があり、関連する構成を調整する必要がある場合があります。
サーバーサポート:すべてのサーバーが長い間接続されたままであるとは限りません。 Keep-Aliveを使用する場合は、ターゲットサーバーがこの機能をサポートしていることを確認してください。