$ch = curl_init(); $c_url = 'http://www.baidu.com'; $c_url_data = "product_&type=".$type.""; curl_setopt($ch, CURLOPT_URL,$c_url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $c_url_data); echo $result = curl_exec($ch); curl_close ($ch); unset($ch);
この記事では、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セッションを作成します。コードは次のとおりです:
<?php // create a new curl resource $ch = curl_init(); ?>
curlセッションの作成に成功しました。 URL のコンテンツを取得する必要がある場合、次のステップは URL をcurl_setopt() 関数に渡すことです。コード:
<?php // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”); ?>
前のステップが完了すると、curl の準備作業が完了し、curl URL サイトのコンテンツを取得して印刷します。コード:
<?php // grab URL and pass it to the browser curl_exec($ch); ?>
最後に、現在のcurlセッションを閉じます
<?php //close curl resource, and free up system resources curl_close($ch); ?>
完成したサンプルコードを見てみましょう:
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.nl/”); // grab URL and pass it to the browser curl_exec($ch); // close curl resource, and free up system resources curl_close($ch); ?>
別のサイトのコンテンツを取得し、それをブラウザに自動的に出力しました。取得した情報を整理し、その出力の内容を制御する他の方法はありますか? curl_setopt() 関数のパラメータで、コンテンツを取得するが出力しない場合は、CURLOPT_RETURNTRANSFER パラメータを 0 以外の値/true! に設定します。を参照してください:
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.nl/”); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // grab URL, and return output $output = curl_exec($ch); // close curl resource, and free up system resources curl_close($ch); // Replace ‘Google' with ‘PHPit' $output = str_replace('Google', ‘PHPit', $output); // Print output echo $output; ?>
上記の 2 つの例では、curl_setopt() 関数の異なるパラメーターを設定することで、異なる結果が得られることがわかります。これが、curl が強力な理由です。これらの意味を見てみましょう。パラメーター。
CURL 関連のオプション:
PHP マニュアルのcurl_setopt() 関数を読んだことがある方は、その下にパラメータの長いリストがあることがわかります。詳細については、1 つずつ紹介するのは不可能です。 PHP マニュアルを確認してください。ここでは、一般的に使用されるいくつかのパラメーターと一部のパラメーターのみが紹介されています。
最初の興味深いパラメータは CURLOPT_FOLLOWLOCATION です。このパラメータを true に設定すると、curl はリダイレクト コマンドに基づいてより深いリダイレクト パスを取得します。たとえば、PHP ページを取得しようとすると、次のようなジャンプ コードが含まれます。 PHP ページでは、Curl はジャンプ コードを返す代わりに http://new_url からコンテンツを取得します。完全なコードは次のとおりです。
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.com/”); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // grab URL, and print curl_exec($ch); ?>
Google がリダイレクト リクエストを送信すると、上記の例はリダイレクトされた URL に基づいてコンテンツを取得し続けます。このパラメータに関連する 2 つのオプションは CURLOPT_MAXREDIRS と CURLOPT_AUTOREFERER です。パラメータ CURLOPT_MAXREDIRS オプションを使用すると、次のことが可能になります。ジャンプを定義します。リクエストの最大数。この最大数を超えると、コンテンツは取得されなくなります。 CURLOPT_AUTOREFERER が true に設定されている場合、curl は自動的にリファラー ヘッダーを各ジャンプ リンクに追加します。これはあまり重要ではないかもしれませんが、場合によっては非常に便利です。
次に導入されるパラメータは CURLOPT_POST です。これは、GET リクエストの代わりに POST リクエストを実行できるため、非常に便利な機能です。これは本質的に、フォームで実際に実行することなく
他のフォーム ページを送信できることを意味します。 。以下の例は、私が言いたいことを示しています:
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL,”http://projects/phpit/content/using%20curl%20php/demos/handle_form.php”); // Do a POST $data = array('name' => ‘Dennis', 'surname' => ‘Pallett'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // grab URL, and print curl_exec($ch); ?> And the handle_form.php file: echo ‘Form variables I received:'; echo ‘'; print_r ($_POST); echo ‘'; ?>ご覧のとおり、これによりフォームの送信が非常に簡単になり、常にフォームに入力することなくすべてのフォームをテストできる優れた方法です。
CURLOPT_CONNECTTIMEOUT パラメータは通常、curl がリンクをリクエストする時間を設定するために使用されます。これは非常に重要なオプションです。この時間を設定しすぎると、curl リクエストが失敗する可能性があります。
ただし、設定が長すぎると、PHP スクリプトが停止する可能性があります。このパラメータに関連するオプションは CURLOPT_TIMEOUT です。これは、curl の実行が許可されるまでに必要な時間を設定するために使用されます。これを非常に小さい値に設定すると、ダウンロードに時間がかかるため、ダウンロードされたページが不完全になる可能性があります。
最後のオプションは CURLOPT_USERAGENT で、webspilder や IE6.0 などのリクエストのクライアント名をカスタマイズできます。サンプル コードは次のとおりです。
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://sc.jb51.net/”); curl_setopt($ch, CURLOPT_USERAGENT, ‘My custom web spider/0.1′); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // grab URL, and print curl_exec($ch); ?>
现在我们把最有意思的一个参数都介绍过了,下面我们来介绍一个curl_getinfo() 函数,看看它能为我们做些什么。
获取页面的信息:
函数curl_getinfo()可以使得我们获取接受页面各种信息,你能编辑这些信息通过设定选项的第二个参数,你也可以传递一个数组的形式。就像下面的例子:
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options 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); // grab URL $output = curl_exec($ch); // Print info echo ‘'; print_r (curl_getinfo($ch)); echo ‘'; ?>
大部分返回的信息是请求本身的,像:这个请求花的时间,返回的头文件信息,当然也有一些页面的信息,像页面内容的大小,最后修改的时间。
那些全是关于curl_getinfo()函数的,现在让我们看看它的实际用途。
实际用途:
curl库的第一用途可以查看一个URL页面是否存在,我们可以通过查看这个URL的请求返回的代码来判断比如404代表这个页面不存在,我们来看一些例子:
// create a new curl resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, “http://www.google.com/does/not/exist”); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // grab URL $output = curl_exec($ch); // Get response code $response_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); // Not found? if ($response_code == ‘404′) { echo ‘Page doesn\'t exist'; } else { echo $output; } ?>
其他的用户可能是创建一个自动检查器,验证每个请求的页面是否存在。
我们可以用curl库来写和google类似的网页蜘蛛(web spider),或是其他的网页蜘蛛。这篇文章不是关于如何写一个网页蜘蛛的,因此所以我们没有讲任何关于网页蜘蛛的细节问题,但是以后在PHPit 将会介绍用 curl来构造一个web spider.
结论:
在这篇文章我已经表明,如何使用php中的curl库和其大部分的选项。
为最基本的任务,只想获得一个网页,你可能不会需要CURL库,但是,一旦你想要做任何事情稍微先进的,您可能会想要使用curl库。
在近未来,我会告诉您究竟如何建立自己的网络蜘蛛,类似Google的网络蜘蛛,敬请期待,以phpit。
更多在PHP中使用curl_init函数的说明相关文章请关注PHP中文网!