概要:
cURL は、URL 構文を使用してコマンド ライン モードで動作するファイル転送ツールです。現在、Apple マシンには cURL が組み込まれています。 cURL は、HTTP、FTP、その他のプロトコルを幅広くサポートする包括的な送信ツールです。Thunder や Express などのダウンロード ツールのすべての機能も実現できます。 cURL 構文のサポートは PHP でも提供されます。
PHP を利用し、Daniel Stenberg によって作成された libcurl ライブラリを使用すると、さまざまな種類のプロトコルを使用してさまざまなサーバーに接続して通信できます。 libcurl は現在、http、https、ftp、gopher、telnet、dict、file、および ldap プロトコルをサポートしています。 libcurl は、HTTPS 認証、HTTP POST、HTTP PUT、FTP アップロード (これは PHP の FTP 拡張機能を通じて行うこともできます)、HTTP フォームベースのアップロード、プロキシ、Cookie、およびユーザー名 + パスワード認証もサポートしています。
cURL が必要な理由:
ファイル (URL) を読み取る一般的な方法は、file_get_contents、file などの PHP の組み込みファイル読み取り関数の一部を使用することです (記事「ファイルを読み取るための一般的な方法」を参照してください) in PHP"); しかし、これらのメソッドは単純なファイル読み取りのみを実行でき、URL へのデータの POST、プロキシ サーバーの使用、SSL プロトコルを使用した URL の読み取り、URL ログイン認証などの複雑な機能を実装できません。そして、cURL はこれらの関数のサポートを提供します。
開く方法: PHP ディレクトリにある 2 つのファイル libeay32.dll と ssleay32.dll を C:windowssystem32 ディレクトリにコピーします。 php.iniを変更します。 extension = php_curl.dll の前のセミコロンを削除します。 Apache サービスを再起動し、phpinfo を確認します。curl が有効になっていることがわかります
cURL リクエストを確立するための基本手順: 1. 初期化
curl_init メソッドを使用して cURL ハンドルを初期化します
$ch =curl_init("http: //www.example.com/");
curl_init メソッドはオプションのパラメータ URL を提供し、curl_setopt()、curl_exec()、およびcurl_close() 関数で使用する cURL ハンドルを返します。
URL がcurl_init で指定されていない場合は、curl_setopt でこの値を手動で設定する必要があります。URL が指定されている場合、CURLOPT_URL は自動的にこの値に設定されます。
2. 変数を設定するcurl_setopt メソッドを使用して cURL 送信パラメータを設定するか、curl_setopt_array を使用して一連のパラメータをバッチで設定します。
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
$ch は、curl_init が初期化されたときに返される cURL ハンドルです。
3. 実行して結果を取得しますcURL セッションを実行するには、curl_exec を使用します。成功した場合は TRUE、失敗した場合は FALSE を返します。ただし、CURLOPT_RETURNTRANSFER オプションが設定されている場合、関数は成功した場合は実行結果を返し、成功した場合は FALSE を返します。それは失敗します。
curl_exec($ch);
curl_getinfo を使用して cURL セッションに関する情報を取得することもできます。
curl_getinfo($info);
curl_getinfo によって返される配列には、次の情報が含まれます:
"url" //リソースネットワークアドレス "content_type" //コンテンツエンコーディング "http_code" //HTTP ステータスコード "header_size" //ヘッダーのサイズ "request_size" //要求されたサイズ "filetime" //ファイル作成時間 "ssl_verify_result" //SSL 検証結果 "redirect_count" //ジャンプ テクノロジ "total_time" //かかった合計時間 "namelookup_time" //DNS クエリにかかった時間 "connect_time " //接続待機時間 "pretransfer_time" //送信までの準備時間 "size_upload" //アップロードデータのサイズ "size_download" //ダウンロードデータのサイズ "speed_download" //ダウンロード速度 "speed_upload" //アップロード速度"download_content_length" //ダウンロードされたコンテンツの長さ "upload_content_length" //アップロードされたコンテンツの長さ "starttransfer_time" //転送を開始する時間 "redirect_time" //リダイレクトには 4 時間がかかります。 cURL セッションを閉じますcurl_close を使用しますcURL セッションを閉じ、すべてのリソース (cURL ハンドル $ch などを含む) を解放します。
curl_close($ch);
完全な例は次のとおりです:
<?php // 1. 初始化 $ch = curl_init("http://www.baidu.com"); // 2. 设置选项 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出,如果没有设置CURLOPT_RETURNTRANSFER,curl_exec($ch)将直接输出返回内容。
// 3. 执行会话并获取内容 $output = curl_exec($ch); //或者使用curl_multi_getcontent()获取会话返回的内容 echo $output; $info = curl_getinfo($ch); print_r($info); // 4. 关闭curl会话 curl_close($ch);?>
もちろん、curl_errorを使用してセッションエラー情報を取得することもできます。
if($output === false)//注意是三个等号,表示检查返回值是boolean类型,如果是两个等号,返回值为空字符串也会被认为是false echo 'cURL error:'.curl_error($ch);
例えば、Alipay のホームページに直接アクセスします。 Alipay のホームページは SSL プロトコルに基づいているため、直接アクセスすると証明書エラーが表示されます。データを URL に POST します
cURL error:SSL certificate problem, verify that the CA cert is OK. Details:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
<?php // 1. 初始化 $ch = curl_init("http://www.baidu.com"); // 2. 设置代理服务器 curl_setopt($ch, CURLOPT_PROXY, '127.0.0.1:8888'); // 3. 执行会话 curl_exec($ch); // 4. 关闭curl会话 curl_close($ch);?>
ブラウザのユーザー エージェントを使用します
<?php //POST数据 $curlPost = array( 'name'=>'myname', 'pwd'=>'mypassword' ); //或者 $curlPost = 'name=myname&pwd=mypassword';
SSL プロトコルの URL にアクセスします
//初始化 $ch = curl_init("http://localhost/SP/getpost.php"); //设置 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); //设施post方式提交数据 curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); //设置POST的数据 //执行会话并获取内容 $output = curl_exec($ch); echo $output; //关闭curl会话 curl_close($ch);?>
cURL には、ブログのフレンドリー リンクが有効かどうかを確認するなど、他にも多くの実用的な用途があります。ここでは、curl_getinfo() 関数によって返される http_code 値を使用する必要があります。また、ファイルのアップロード機能なども実装できます。