cURL 是一個利用URL語法規定來傳輸文件和數據的工具,支持很多協議,如HTTP、FTP、TELNET等。
PHP 支持 Daniel Stenberg 創建的 libcurl 庫,能夠連接通訊各種服務器、使用各種協議。libcurl 目前支持的協議有 http、https、ftp、gopher、telnet、dict、file、ldap。 libcurl 同時支持 HTTPS 證書、HTTP POST、HTTP PUT、 FTP 上傳(也能通過 PHP 的 FTP 擴展完成)、HTTP 基於表單的上傳、代理、cookies、用戶名+密碼的認證。
我們可以使用cURL通過我們的服務器去獲取其他服務器的數據,比如氣象局服務器的天氣預報數據、比特幣交易所的交易記錄數據等。
在PHP中使用cURL,需要開啟curl擴展:
- 在php.ini里面開啟curl這個擴展
- 將PHP的安裝路徑保存到環境變量的系統變量中(環境變量之間的分隔符是英文的分號)
- 重啟apache服務器
- 重啟計算機
實現curl的基本步驟:
- 初始化 curl_init();
- 設置相關變量 curl_setopt()
- 執行並獲取結果 curl_exec()
- 釋放對象 curl_close()
封裝的cURL方法一:
//curl采集器 public function http_curl($url,$type='get',$res='json',$arr=''){ //1.初始化curl $ch=curl_init(); //2.設置curl的參數 curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); if($type=='post'){ curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$arr); } //3.采集 $output=curl_exec($ch); //4.關閉 curl_close($ch); //如果返回的值,是json格式,則轉換成數組 if($res=='json'){ if(curl_errno($ch)){ //請求失敗,返回錯誤信息 return curl_error($ch); }else{ //請求成功 return json_decode($output,true); } } }//http_curl end
封裝的cURL方法二:
function getContent($url, $method, $body='') { $ch = curl_init(); //post提交方式 if ($method == 'POST') { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $body); } else { $url .= '?' . $body; } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array( "x-sdk-client" => "php/2.0.0", )); if ( substr($url, 0, 5) == 'https' ) { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); } $rtn = curl_exec($ch); if ($rtn === false) { // 大多由設置等原因引起,一般無法保障后續邏輯正常執行, // 所以這里觸發的是E_USER_ERROR,會終止腳本執行,無法被try...catch捕獲,需要用戶排查環境、網絡等故障 trigger_error("[CURL_" . curl_errno($ch) . "]: " . curl_error($ch), E_USER_ERROR); } curl_close($ch); return $rtn; }