PHP での Curl の使用

Jun 23, 2016 pm 02:30 PM

原文(英語)アドレス: 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 ライブラリの使用方法を見てみましょうを使用しますが、次に、最も基本的な使用法から始める必要があります

基本的な使用法:

最初のステップでは、関数curl_init()を通じて新しいcurlセッションを作成します。コードは次のとおりです:

// 新しいcurlリソースを作成します
$ch =curl_init();
?>
URLのコンテンツを取得する必要がある場合、次のステップは、curlセッションを作成することです。 curl_setopt() 関数への URL、コード:

// URL とその他の適切なオプションを設定します
curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”);
?>
done 前のステップで、curl が URL サイトのコンテンツを取得して印刷する準備作業が完了しました。コード:

// URL を取得してブラウザに渡します
curl_exec($ch);
?>
最後に、現在の Curl セッションを閉じます

//closecurlリソースを追加し、システム リソースを解放します
curl_close($ch);
?>
完成したコード例を見てみましょう:

// 新しい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! に設定します。を参照してください:

// 新しいcurlリソースを作成します

$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 は自動的にリファラー ヘッダーを各ジャンプ リンクに追加します。これはあまり重要ではないかもしれませんが、場合によっては非常に役立ちます。

次に導入されるパラメーターは CURLOPT_POST です。これは、GET リクエストの代わりに POST リクエストを実行できるため、非常に便利な機能です。これは本質的に、実際にフォームに入力しなくても、ページの他のフォームを送信できることを意味します。次の例は、私が言いたいことを示しています:


// 新しい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);
?>

(ライブデモを見る)

そして、handle_form.php ファイル:


echo '

私が受け取ったフォーム変数:

';

echo '

';<br>print_r ($ _POST);<br>echo '
';
?>

ご覧のとおり、これによりフォームの送信が非常に簡単になり、フォームをまったく入力せずにすべてのフォームをテストする優れた方法になります。回。

CURLOPT_CONNECTTIMEOUT パラメータは通常、curl がリンクをリクエストする時間を設定するために使用されます。これは非常に重要なオプションです。この時間を設定しすぎると、curl リクエストが失敗する可能性があります。

しかし、あまりにも長く設定すると、おそらく 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 のウェブ スパイダーに似た独自のウェブ スパイダーを構築する方法を正確に説明する予定ですので、楽しみにしていてください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

See all articles