cURL是“客戶端URL庫”(Client URL Library)的縮寫,它支持通過多種協議(如HTTP、HTTPS、FTP等)與不同類型的服務器通信。PHP中的cURL擴展提供了強大的功能,允許開發者輕松地與外部API交互。有關cURL的詳細文檔,可以參考PHP官方cURL文檔。
接下來,我們將從基礎用法開始,逐步深入了解如何使用cURL進行API調用。
以下是一個簡單的PHP cURL請求示例,它會將API響應作為字符串返回:
// 創建并初始化cURL會話
$ch = curl_init();
// 設置cURL選項
curl_setopt($ch, CURLOPT_URL, "https://api.example.com/data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);// 執行cURL請求并獲取響應
$output = curl_exec($ch);// 關閉cURL會話
curl_close($ch);// 輸出響應
echo $output;
在上述代碼中,我們使用curl_exec()執行了請求,并將結果存儲在$output變量中。即使在調用curl_close()關閉連接后,$output變量仍然可用。
為了提高代碼的可維護性,我們可以將cURL的調用邏輯封裝成一個通用函數。以下是一個支持GET、POST、PUT和DELETE等多種HTTP方法的函數示例:
function callAPI($method, $url, $data, $headers = false) {
$ch = curl_init();
// 設置URL
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 根據請求方法設置cURL選項
switch (strtoupper($method)) {
case "POST":
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
break;
case "PUT":
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
break;
case "DELETE":
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
break;
} // 設置請求頭(如果提供)
if ($headers) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
} // 執行請求并獲取響應
$result = curl_exec($ch); // 關閉cURL會話
curl_close($ch); return $result;
}
GET請求是最簡單的API調用方式,通常用于從服務器獲取數據。在調用callAPI函數時,$data參數可以設置為false。
$get_data = callAPI('GET', 'https://api.example.com/get_url/' . $user['User']['customer_id'], false);
$response = json_decode($get_data, true);
在上面的代碼中,我們將API返回的JSON字符串通過json_decode()轉換為PHP數組,方便后續操作。
POST請求通常用于向服務器發送數據。以下是一個POST請求的示例:
$data_array = array(
"name" => "John Doe",
"email" => "john.doe@example.com"
);
$post_data = json_encode($data_array);$response = callAPI('POST', 'https://api.example.com/post_url', $post_data);
$response_array = json_decode($response, true);
在這里,我們使用json_encode()將PHP數組轉換為JSON字符串,并將其作為請求體發送給API。
PUT請求與POST類似,主要用于更新資源。以下是一個PUT請求的示例:
$data_array = array(
"id" => 123,
"status" => "active"
);
$put_data = json_encode($data_array);$response = callAPI('PUT', 'https://api.example.com/put_url', $put_data);
$response_array = json_decode($response, true);
DELETE請求用于刪除資源。以下是一個DELETE請求的示例:
$id = 123;
$response = callAPI('DELETE', 'https://api.example.com/delete_url/' . $id, false);
需要注意的是,DELETE操作通常是不可逆的,因此在調用此類API時需要格外小心。
在某些情況下,我們需要為API調用添加自定義請求頭。為此,可以在callAPI函數中添加一個$headers參數,并在調用時傳入所需的請求頭。例如:
$headers = array(
"Authorization: Bearer your_token",
"Content-Type: application/json"
);
$response = callAPI('GET', 'https://api.example.com/secure_data', false, $headers);
以下示例展示了如何在調用API前使用搜索參數篩選數據:
$one_month_ago = date("Y-m-d", strtotime("-1 month"));
$headers = array(
"Custom-Header: Search-Parameter=$one_month_ago"
);$response = callAPI('GET', 'https://api.example.com/search', false, $headers);
在這里,我們通過自定義請求頭傳遞了一個搜索參數,用于獲取過去30天內的相關數據。
本文介紹了如何使用PHP結合cURL實現API調用,包括GET、POST、PUT和DELETE等常見HTTP方法,并提供了封裝函數的實現和多個實際應用示例。通過這些內容,相信你已經對cURL的工作原理和使用方法有了更深入的理解。
如果你想進一步學習如何生成AUTH密鑰(如utoken)等高級功能,可以參考我撰寫的PHP cURL API調用的第二部分內容。
原文鏈接: https://weichie.com/blog/curl-api-calls-with-php/