有關PHP的CURL功能的基本用法
阿新 • • 發佈:2019-01-10
1.相信有很多人很多時候跟我一樣,寫程式碼習慣了從搜尋引擎上去搜索貼上,忘了尋其本意。
在開發中,我很多次都用到了Curl,但是每次都是去複製貼上。其實Curl的基本用法也很簡單,主要也就是這幾個函式的使用。
$ch = curl_init(); // 建立一個新的CURL資源賦給變數$ch curl_setopt($ch, CURLOPT_URL, $url); // 設定URL $response = curl_exec($ch); // 執行,獲取URL並輸出到瀏覽器 curl_close($ch); // 釋放資源
如果我們希望獲取內容但不輸出,可以使用 CURLOPT_RETURNTRANSFER 引數,並設定其值為非0或者true值。程式碼如下:curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
我們可以通設定函式curl_setopt()的不同引數,可以獲得不同的結果,這也是CURL擴充套件的強大之處。curl_setopt()函式的常用引數選項具體可查閱官方文件。
貼兩個常用示例
get請求示例
public function httpGet(string $url = '') { // 記錄請求資訊的日誌 // todo try { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 60); //https 請求 if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https") { curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); } $response = curl_exec($ch); $errorCode = curl_errno($ch); curl_close($ch); if (!empty($errorCode)) { // 可記錄錯誤碼日誌 return null; } // 記錄返回結果日誌 return $response; } catch (\Exception $e) { $errorLog = [ 'msg' => $e->getMessage(), 'trace' => $e->getTraceAsString(), 'data' => [ 'url' => $url, ] ]; // 記錄錯誤日誌 return null; } }
post請求示例
public function httpPost(string $url = '', array $data = []) { // 記錄請求資訊的日誌 // todo try { $jsonData = json_encode($data); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $jsonData); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_TIMEOUT, 60); curl_setopt($curl, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json; charset=utf-8', 'Content-Length:' . strlen($jsonData) ]); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //https 請求 if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https") { curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); } $result = curl_exec($curl); $errorCode = curl_errno($curl); curl_close($curl); if (!empty($errorCode)) { // 可記錄錯誤碼日誌 return null; } // 記錄返回結果日誌 return json_decode($result, true); } catch (\Exception $e) { $errorData = [ 'msg' => $e->getMessage(), 'trace' => $e->getTraceAsString(), 'data' => [ 'url' => $url, 'postData' => $data ] ]; // 記錄錯誤日誌 return null; } }