今天我們來聊聊 PHP 中的 Curl。
Curl 最常用的功能是在 PHP 中發(fā)送網(wǎng)絡(luò)請求。通過 Curl,我們可以訪問遠程服務(wù)器上的數(shù)據(jù),并將其引入到我們的應(yīng)用程序中。
一個簡單的用例如下:
$curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "http://www.example.com"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); curl_close($curl); echo $response;
上述代碼發(fā)送了一個 GET 請求到 http://www.example.com 并接收了頁面的內(nèi)容。我們可以將其保存在 $response 變量中,并將其輸出到瀏覽器中。
除了 GET 請求,Curl 還支持 POST 請求。我們可以通過設(shè)置 CURLOPT_POST 和 CURLOPT_POSTFIELDS 來發(fā)送 POST 請求。以下是一個示例:
$curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "http://www.example.com/submit-data"); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, "name=John&email=john@example.com"); $response = curl_exec($curl); curl_close($curl); echo $response;
此代碼向 http://www.example.com/submit-data 發(fā)送了一個 POST 請求,將 name 和 email 表單字段以字符串形式傳遞。在服務(wù)器端,您可以通過 $_POST['name'] 和 $_POST['email'] 來訪問這些字段。
另一個值得注意的 Curl 功能是它可以通過設(shè)置 CURLOPT_HEADER 來訪問響應(yīng)頭。以下是一個示例:
$curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "http://www.example.com"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HEADER, true); $response = curl_exec($curl); $headers = []; $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE); $header_text = substr($response, 0, $header_size); $header_lines = explode("\r\n", $header_text); foreach ($header_lines as $line) { if (strpos($line, ':') !== false) { [$key, $value] = explode(':', trim($line), 2); $headers[trim($key)] = trim($value); } else { $headers[] = $line; } } $body = substr($response, $header_size); curl_close($curl); var_dump($headers); // 輸出響應(yīng)頭 echo $body; // 輸出響應(yīng)體
此代碼中,我們首先將 CURLOPT_HEADER 設(shè)置為 true,以便 Curl 返回響應(yīng)頭。然后,我們使用 curl_getinfo() 函數(shù)獲取響應(yīng)頭的大小,將其從響應(yīng)中剝離出來,并將其轉(zhuǎn)換為數(shù)組格式以更方便地訪問。
您還可以設(shè)置 CURLOPT_HTTPHEADER 選項以指定請求頭。以下是一個示例:
$curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "http://www.example.com"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, ["Authorization: Bearer $access_token"]); $response = curl_exec($curl); curl_close($curl); echo $response;
在此示例中,我們將 CURLOPT_HTTPHEADER 設(shè)置為一個字符串?dāng)?shù)組,其中包括我們的訪問令牌。這是向 API 發(fā)送身份驗證請求的一種常見方法。
最后提醒,為了保障代碼安全,我們在使用 Curl 的時候需要做好安全防范措施,比如對發(fā)送的數(shù)據(jù)進行過濾和加密。