PHP使用CURL詳解php
Curl是一個很是強大的開源庫,支持不少協議,包括HTTP、FTP、TELNET等,咱們使用它來發送HTTP請求。它給我 們帶來的好處是能夠經過靈活的選項設置不一樣的HTTP協議參數,而且支持HTTPS。CURL能夠根據URL前綴是「HTTP」 仍是「HTTPS」自動選擇是否加密發送內容。html
使用CURL的PHP擴展完成一個PHP的請求,通常分爲四個步驟:數組
初始化Curl鏈接句柄網絡
設置屬性選項curl
執行獲取結果,處理異常函數
關閉Curl鏈接句柄post
/*get請求*/ function curlGet($url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if (($tmp = curl_exec($ch)) === false) { return false; } curl_close($ch); return $tmp; } /*post請求*/ function curlPost($url, $params) { $ssl = substr($url, 0, 8) == "https://" ? TRUE : FALSE; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER,FALSE); curl_setopt($ch, CURLOPT_NOBODY, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE); curl_setopt($ch, CURLOPT_TIMEOUT, 120); curl_setopt($ch, CURLOPT_POST,TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); if ($ssl){ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何證書 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 檢查證書中是否設置域名 } if (($returnData = curl_exec($ch)) === false) { return false; } curl_close($ch); return $returnData; }
說明:ui
經過curl_init($url);
初始化連句柄,也能夠經過選項設置curl_setopt($ch, CURLOPT_URL, $url);
參數爲請求的地址編碼
經過curl_setopt()
設置鏈接的選項,CURLOPT_RETURNTRANSFER
設置爲1表示稍後執行的curl_exec函數的返回是URL的返回字符串,而不是把返回字符串定向到標準輸出並返回TRUE;其餘選項設置參考http://www.php.net/manual/en/...加密
($tmp = curl_exec($ch)
獲取請求結果
curl_close($ch)
釋放鏈接
在curl_exec()函數執行以後,能夠使用curl_getinfo()函數獲取CURL請求輸出的相關信息,示例代碼以下:
curl_exec($ch); $info = curl_getinfo($sh);
curl_getinfo()
輸出是一個數組,包含如下數據:
url:網絡地址。
content_type:內容編碼。
http_code:HTTP狀態碼。
header_size:header的大小。
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,即總傳輸消耗的時間
參考: