cURL 是 PHP 呼叫外部 API、模擬瀏覽器請求的利器。本文說明擴充套件安裝、HTTP POST 與 HTTPS POST 兩種常見情境,並提供可直接使用的封裝函式。
php.ini,啟用 extension=php_curl.dll。extension_dir 路徑下有 php_curl.dll。libeay32.dll、ssleay32.dll 複製到系統目錄(如 C:/Windows/System32)。function _http_curl_post($url, $data) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 4);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
curl_setopt($ch, CURLOPT_HEADER, false);
if ($data) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "value=" . json_encode($data)); // 依 API 格式調整
}
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
$params = [
'id' => 1,
'web_name' => '好腳本',
'web_url' => 'https://www.bKjia.c0m/',
'web_miaoshu' => '腳本編程示例'
];
$response = _http_curl_post($url, $params);
$arr = json_decode($response, true);
針對自簽憑證或測試環境,需關閉 SSL 驗證:
function _https_curl_post($url, $vars) {
$fields_string = '';
foreach ($vars as $key => $value) {
$fields_string .= $key . '=' . $value . '&';
}
$fields_string = rtrim($fields_string, '&');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 關鍵:忽略憑證驗證
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, count($vars));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
$data = curl_exec($ch);
curl_close($ch);
return $data ?: false;
}
| 選項 | 用途 |
|---|---|
| CURLOPT_RETURNTRANSFER | 將回傳內容作為字串而非直接輸出 |
| CURLOPT_FOLLOWLOCATION | 自動追蹤 301/302 重導向 |
| CURLOPT_SSL_VERIFYPEER | 驗證 SSL 憑證(生產環境建議 true) |
| CURLOPT_POSTFIELDS | POST 欄位資料,陣列會自動編碼為 multipart/form-data |
CURLOPT_SSL_VERIFYPEER,應正確部署 CA 憑證。