CURL は、HTTP、FTP、TELNET などを含む多くのプロトコルをサポートする非常に強力なオープンソース ライブラリです。私たちはこれを HTTP リクエストの送信に使用します。これによりもたらされる利点は、柔軟なオプションを通じてさまざまな HTTP プロトコル パラメーターを設定できることと、HTTPS をサポートしていることです。 CURL は、URL プレフィックスが「HTTP」であるか「HTTPS」であるかに基づいて、送信されたコンテンツを暗号化するかどうかを自動的に選択できます。
CURL を使用してリクエストを送信する基本プロセス
CURL の PHP 拡張機能を使用して HTTP リクエストの送信を完了するには、通常次の手順があります:
接続ハンドルを初期化する
CURL オプションを設定する
実行して結果を取得する;
VURL 接続ハンドルを解放します。
次のプログラムの一部は、CURL を使用して HTTP を送信する一般的なプロセスです
// 1. 初始化 $ch = curl_init(); // 2. 设置选项,包括URL curl_setopt($ch,CURLOPT_URL,"http://www.devdo.net"); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_HEADER,0); // 3. 执行并获取HTML文档内容 $output = curl_exec($ch); if($output === FALSE ){ echo "CURL Error:".curl_error($ch); } // 4. 释放curl句柄 curl_close($ch);
上記のコードでは 4 つの関数が使用されています
curl_init() とcurl_close() は、それぞれ CURL 接続を初期化し、CURL 接続を閉じます。比較的単純なものです。
curl_exec() は CURL リクエストを実行します。エラーが発生しない場合、関数は対応する URL によって返されたデータを string として返します。エラーが発生した場合、関数は FALSE を返します。出力が FALSE であるかどうかを判断するために等号が使用されることに注意してください。これは、空の文字列を返すかエラーを返すかを区別するためです。
CURL 関数ライブラリで最も重要な関数は、curl_setopt() です。これは、CURL 関数ライブラリで定義されたオプションを設定することで HTTP リクエストをカスタマイズできます。上記のコード スニペットでは、3 つの重要なオプションが使用されています:
1. CURLOPT_URL は、要求された URL を指定します。
2. CURLOPT_RETURNTRANSFER は、後で実行されるcurl_exec 関数の戻り値が URL の戻り文字列であることを示す 1 に設定されます。 URL の戻り文字列ではなく、戻り文字列を標準出力に送り、TRUE を返します。 CURLLOPT_HEADER 0 に設定すると、HTTP ヘッダー情報を返さないことを意味します。
CURL には多くのオプションがあります。PHP の公式 Web サイト (http://www.php.net/manual/en/function.curl-setopt.php) にアクセスして、CURL でサポートされているすべてのオプションのリストを表示できます。
CURL リクエストの出力情報を取得する
curl_exec() 関数が実行された後、curl_getinfo() 関数を使用して、CURL リクエストの関連情報出力を取得できます。サンプル コードは次のとおりです。上記のコードでは、curl_getinfo は次のデータを含む連想配列を返します:
url: ネットワーク アドレス。
content_type: コンテンツのエンコーディング。
http_code:
HTTPステータスコードrequest_size: リクエストのサイズ。
filetime: ファイルが作成された時刻。
ssl_verify_result: SSL検証結果。
redirect_count: ジャンプ数。
total_time: 費やした合計時間。
namelookup_time: DNS クエリには時間がかかります。
connect_time: 接続の待機に費やした時間。
pretransfer_time: 転送前の準備にかかる時間。
size_uplpad: アップロードされたデータのサイズ。
size_download: ダウンロードされたデータのサイズ。
speed_download: ダウンロード速度。
speed_upload: アップロード速度。
download_content_length: ダウンロード コンテンツの長さ。
upload_content_length: アップロードされたコンテンツの長さ。
starttransfer_time: 転送を開始するタイムテーブル。
redirect_time: リダイレクト時間。
curl_getinfo()函数还有一个可选择参数$opt,通过这个参数可以设置一些常量,对应到上术这个字段,如果设置了第二个参数,那么返回的只有指定的信息。例如设置$opt为CURLINFO_TOTAL_TIME,则curl_getinfo()函数只返回total_time,即总传输消耗的时间,在只需要关注某些传输信息时,设置$opt参数很有意义。
使用CURL发送GET请求
如何使用CURL来发送GET请求,发送GET请求的关键是拼装格式正确的URL。请求地址和GET数据由一个“?”分割,然后GET变量的名称和值用“=”分隔,各个GET名称和值由“&”连接。PHP为我们提供了一个函数专门用来拼装GET请求和数据部分——http_build_query,该函数接受一个关联数组,返回由该关联数据描述的GET请求字符串。使用这个函数,结合CURL发送HTTP请求的一般流程,我们封闭了一个发送GET请求的函数——doCurlGetRequest,具体代码如下:
** *@desc 封闭curl的调用接口,get的请求方式。 */ function doCurlGetRequest($url,$data,$timeout = 5){ if($curl == "" || $timeout <= 0){ return false; } $url = $url.'?'.http_bulid_query($data); $con = curl_init((string)$url); curl_setopt($con, CURLOPT_HEADER, false); curl_setopt($con, CURLOPT_RETURNTRANSFER,true); curl_setopt($con, CURLOPT_TIMEOUT, (int)$timeout); return curl_exec($con); }
这个函数把使用http_build_query 拼装好的带GET参数的URL传给curl_init函数,然后使用CURL发送HTTP请求。
使用CURL发送POST请求
可以使用CURL提供的选项CURLOPT_POSTFIELDS,设置该选项为POST字符串数据就可以把请求放在正文中。同样我们实现了一个发送POST请求的函数——doCurlPostRequest,代码如下:
/** ** @desc 封装 curl 的调用接口,post的请求方式 **/ function doCurlPostRequest($url,$requestString,$timeout = 5){ if($url == '' || $requestString == '' || $timeout <=0){ return false; } $con = curl_init((string)$url); curl_setopt($con, CURLOPT_HEADER, false); curl_setopt($con, CURLOPT_POSTFIELDS, $requestString); curl_setopt($con, CURLOPT_POST,true); curl_setopt($con, CURLOPT_RETURNTRANSFER,true); curl_setopt($con, CURLOPT_TIMEOUT,(int)$timeout); return curl_exec($con); }
上面代码中除了设置CURLOPT_POSTFIELDS外,我们还设置了CURL_POST为true,标识这个请求是一个POST请求。在POST请求中也是可以传输GET数据的,只需要在URL中拼装GET请求数据即可秀。
相关文件:
本文主要和大家介绍了php curl上传、下载、https登陆实现代码,需要的朋友可以参考下......
本文主要为大家详细介绍了功能强大的PHP POST提交数据类,代码简洁且具有一定的参......
很多时候我们需要批量抓取一些网站的资源,这个时候就需要用到爬虫......
以上がPHPでのCURLの使い方の詳しい説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。