cURL 是 PHP 最強大的 HTTP 客戶端庫,支援 HTTPS、POST、Header 自訂、Cookie、Proxy、憑證驗證等企業級功能。基本抓取僅需 4 行核心程式碼。
<?php
$ch = curl_init('https://www.example.com/robots.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$content = curl_exec($ch);
curl_close($ch);
echo $content;
?>
| 選項 | 用途 | 常用值 |
|---|---|---|
| CURLOPT_URL | 目標網址 | 字串 |
| CURLOPT_RETURNTRANSFER | 回傳字串而非直接輸出 | true |
| CURLOPT_POST | 啟用 POST | true |
| CURLOPT_POSTFIELDS | POST 資料 | 陣列或字串 |
| CURLOPT_HTTPHEADER | 自訂 Header | ['Authorization: Bearer xxx'] |
| CURLOPT_TIMEOUT | 總逾時秒數 | 10 |
| CURLOPT_CONNECTTIMEOUT | 連線逾時秒數 | 5 |
| CURLOPT_FOLLOWLOCATION | 追蹤重導向 | true |
| CURLOPT_SSL_VERIFYPEER | 驗證 SSL 憑證 | false (開發) / true (生產) |
| CURLOPT_COOKIEJAR/FILE | Cookie 持久化 | 檔案路徑 |
| CURLOPT_PROXY | Proxy 伺服器 | 'host:port' |
<?php
function httpPostJson(string $url, array $data, int $timeout = 10): ?array {
$ch = curl_init($url);
$payload = json_encode($data);
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'Content-Length: ' . strlen($payload),
'Accept: application/json',
],
CURLOPT_TIMEOUT => $timeout,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_SSL_VERIFYPEER => true,
]);
$response = curl_exec($ch);
$errno = curl_errno($ch);
$error = curl_error($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($errno) {
error_log("cURL 錯誤 [$errno]: $error");
return null;
}
if ($httpCode < 200 || $httpCode >= 300) {
error_log("HTTP $httpCode: $response");
return null;
}
return json_decode($response, true);
}
// 使用
$result = httpPostJson('https://api.example.com/endpoint', ['key' => 'value']);
?>
curl_errno() 非零即為 cURL 層面錯誤(DNS、連線、憑證等)。curl_getinfo($ch, CURLINFO_HTTP_CODE) 判斷 HTTP 狀態碼。CURLOPT_SSL_VERIFYPEER => true 並配置 CURLOPT_CAINFO 指向 CA 憑證包。$ch 或使用 CurlHandle (PHP 8.0+)。cURL 是 PHP 後端整合第三方 API、爬蟲、微服務呼叫的基石工具。