PHP使用CURL詳解


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擴展:

  1. 在php.ini里面開啟curl這個擴展
  2. 將PHP的安裝路徑保存到環境變量的系統變量中(環境變量之間的分隔符是英文的分號)
  3. 重啟apache服務器
  4. 重啟計算機

實現curl的基本步驟:

  1. 初始化  curl_init();
  2. 設置相關變量  curl_setopt()
  3. 執行並獲取結果  curl_exec()
  4. 釋放對象  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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM