原文(英語)アドレス: http://www.phpit.net/article/using-curl-php 著作権表示: Attribution-Noncommercial-NoDerivatives 2.0
Abstract:
この記事では この記事では主に説明していますphp_curl ライブラリの知識と、php_curl をより効果的に使用する方法を説明します。
はじめに
PHP スクリプト コードを作成するときに次の問題に遭遇することがあります: 他のサイトからコンテンツを取得するにはどうすればよいですか?ここにはいくつかの解決策があります。最も簡単なのは、PHP で fopen() 関数を使用することですが、fopen 関数には、「Web クローラー」を構築してクライアントの説明を定義したい場合などに使用する十分なパラメーターがありません。クローラー (IE、Firefox) の場合、POST、GET などのさまざまなリクエスト メソッドを通じてコンテンツを取得します。これらの要件は、 fopen() 関数を使用して達成することはできません。
上記の問題を解決するには、PHP の拡張ライブラリ Curl を使用できます。この拡張ライブラリは通常、デフォルトでインストール パッケージに含まれており、他のサイトのコンテンツを取得したり、他のことを行うために使用できます。もの。 。
注: これらの 2 つのコードには、php_curl 拡張ライブラリのサポートが必要です。curl サポートが有効になっている場合は、curl ライブラリがサポートされていることを意味します。
1. Windows で PHP の CURL ライブラリのサポートを有効にします:
php.ini を開き、extension=php_curl.dll の前の ; 記号を削除します。
2. Linux で PHP の Curl ライブラリのサポートを有効にする:
PHP をコンパイルするときに ./configure の後に ?with-curl を追加します
基本的な使用法:
最初のステップでは、関数curl_init()を通じて新しいcurlセッションを作成します。コードは次のとおりです:
php
// 新しいcurlリソースを作成します
$ch =curl_init();
?>
URLのコンテンツを取得する必要がある場合、次のステップは、curlセッションを作成することです。 curl_setopt() 関数への URL、コード:
// URL とその他の適切なオプションを設定します
// URL を取得してブラウザに渡します
//closecurlリソースを追加し、システム リソースを解放します
// 新しいcurlリソースを作成します
$ch =curl_init ();
// URL とその他の適切なオプションを設定します
curl_setopt($ch, CURLOPT_URL, “http://www.google.nl/”);
// URL を取得してブラウザに渡します
curl_exec($ch );
//curl リソースを閉じ、システム リソースを解放します
curl_close($ch);
?>
(オンライン デモを見る)
別のサイトのコンテンツを取得し、自動的にブラウザに出力しました。取得した情報を整理し、その出力内容を制御する他の方法はありますか? curl_setopt() 関数のパラメータで、コンテンツを取得するが出力しない場合は、CURLOPT_RETURNTRANSFER パラメータを 0 以外の値/true! に設定します。を参照してください:
$ch =curl_init();
// URLおよびその他の適切なオプションを設定します
curl_setopt($ch, CURLOPT_URL, “http://www .google.nl/”);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// URL を取得し、出力を返します
$output =curl_exec($ch);
// Curl リソースを閉じ、システム リソースを解放します
curl_close($ch);
// 'Google' を 'PHPit' に置き換えます
$output = str_replace('Google', 'PHPit', $output);
// 出力を印刷します
echo $output;
?>
(オンライン デモを見る)
上記の 2 つの例では、curl_setopt() 関数のさまざまなパラメーターを設定することで、さまざまな結果が得られることがわかります。これが、curl が強力な理由です。これらのパラメータの意味。
CURL 関連のオプション:
PHP マニュアルのcurl_setopt() 関数を読んだことがある方は、その下にパラメータの長いリストがあることに気づくでしょう。それらを 1 つずつ紹介するのは不可能です。詳細については、PHP マニュアルを確認してください。ここでは、一般的に使用されるいくつかのパラメーターと一部のパラメーターのみを紹介します。
最初の興味深いパラメータは CURLOPT_FOLLOWLOCATION です。このパラメータを true に設定すると、curl はリダイレクト コマンドに基づいてさらに深いリダイレクト パスを取得します。たとえば、PHP ページを取得しようとすると、次のようなジャンプ コードが存在します。この PHP ページ の場合、curl はジャンプ コードを返す代わりに http://new_url からコンテンツを取得します。完全なコードは次のとおりです:
// 新しいカールリソースを作成します
$ch =curl_init();
// URL とその他の適切なオプションを設定します
curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”);
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true);
// URL を取得し、print
curl_exec($ch);
?>
(オンライン デモを表示),
Google がリダイレクト リクエストを送信した場合、上記の例は以下に基づいてリダイレクトします。 URL は引き続きコンテンツを取得します。このパラメーターに関連する 2 つのオプションは CURLOPT_MAXREDIRS と CURLOPT_AUTOREFERER です。この値を超えると、そのコンテンツは取得されなくなります。 CURLOPT_AUTOREFERER が true に設定されている場合、curl は自動的にリファラー ヘッダーを各ジャンプ リンクに追加します。これはあまり重要ではないかもしれませんが、場合によっては非常に役立ちます。
// 新しいcurlリソースを作成します
$ch =curl_init();
// URLとその他の適切なオプションを設定します
curl_setopt($ch, CURLOPT_URL," http: //projects/phpit/content/using%20curl%20php/demos/handle_form.php”);
// POST を実行します
$data = array('name' => 'Dennis', 'surname' => 'パレット');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// URL を取得し、print
curl_exec($ch);
?>
(ライブデモを見る)
echo '
echo '
';<br>print_r ($ _POST);<br>echo '';
しかし、あまりにも長く設定すると、おそらく PHP スクリプトが停止してしまいます。このパラメータに関連するオプションは CURLOPT_TIMEOUT です。これは、curl の実行が許可されるまでに必要な時間を設定するために使用されます。これを非常に小さい値に設定すると、ダウンロードに時間がかかるため、ダウンロードされたページが不完全になる可能性があります。
最後のオプションは CURLOPT_USERAGENT で、webspilder や IE6.0 などのリクエストのクライアント名をカスタマイズできます。 サンプル コードは次のとおりです:
// 新しいcurl リソースを作成します
$ ch =curl_init ();
// URL とその他の適切なオプションを設定します
curl_setopt($ch, CURLOPT_URL, “http://www.useragent.org/”);
curl_setopt($ch, CURLOPT_USERAGENT, '私のカスタム Web スパイダー/0.1′ );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// URL を取得し、print
curl_exec($ch);
?>
(ライブデモを見る)
ここで、最も興味深いものを配置しますパラメータ これを導入したら、curl_getinfo() 関数を導入して、何ができるかを見てみましょう。
ページ情報の取得:
関数curl_getinfo() を使用すると、オプションの 2 番目のパラメーターを設定することで、この情報を編集できます。また、配列の形式で渡すこともできます。次の例のように:
// 新しいcurlリソースを作成します
$ch =curl_init();
// URLとその他の適切なオプションを設定します
curl_setopt($ch, CURLOPT_URL, "http://www .google.com");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FILETIME, true);
// URL を取得します
$output =curl_exec ($ch);
// 情報を印刷します
echo '
';<br>print_r (curl_getinfo($ch));<br>echo '';
返される情報のほとんどは、リクエストにかかった時間、返されたヘッダー ファイル情報、そしてもちろんページ コンテンツのサイズや最終変更時刻などの一部のページ情報など、リクエスト自体です。
curl_getinfo() 関数については以上です。実際に何に使用されるかを見てみましょう。
実際の使用法:
curl ライブラリの最初の使用法は、URL ページが存在するかどうかを確認することです。たとえば、404 は、そのページが存在しないことを意味します。いくつかの例を見てみましょう:
// 新しいcurlリソースを作成します
$ch =curl_init();
// URLおよびその他の適切なオプションを設定します
curl_setopt($ch, CURLOPT_URL, “http://www.google.com/does /not/exist”);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// URL を取得
$output =curl_exec($ch);
// 応答コードを取得
$response_code =curl_getinfo($ch, CURLINFO_HTTP_CODE) ;
// 見つかりません?
if ($response_code == '404') {
echo 'ページが存在しません';
} else {
echo $output;
}
?>
(ライブデモを見る)
他のユーザーは、リクエストされた各ページの存在を確認する自動チェッカーを作成することができます。
curl ライブラリを使用して、Google や他の Web スパイダーに似た Web スパイダーを作成できます。この記事はウェブ スパイダーの書き方に関するものではないため、ウェブ スパイダーに関する詳細については触れませんが、将来的には、curl を使用して PHPit でウェブ スパイダーを構築する方法を紹介します。
結論:
この記事ではPHP でのカール ライブラリの使用方法とそのオプションのほとんどを説明しました。
Web ページを取得するだけの最も基本的なタスクの場合は、おそらく CURL ライブラリは必要ありませんが、もう少し高度なことを実行したい場合は、curl ライブラリを使用することをお勧めします。
近い将来、phpit を使用して、Google のウェブ スパイダーに似た独自のウェブ スパイダーを構築する方法を正確に説明する予定ですので、楽しみにしていてください。