最基本流程
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 回傳字串而非直接輸出
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 逾時秒數
$content = curl_exec($ch);
curl_close($ch);
進階:POST 資料、偽裝 Referer/User-Agent/IP
$postData = 'a=1&b=2';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.example.com');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-FORWARDED-FOR: 0.0.0.0',
'CLIENT-IP: 0.0.0.0'
]); // 偽裝來源 IP (視伺服器是否信任)
curl_setopt($ch, CURLOPT_REFERER, 'https://www.referrer.com/'); // 偽裝來路
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'); // 偽裝 UA
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 支援 3xx 重導向
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 開發環境忽略 SSL 驗證 (生產請勿用)
$content = curl_exec($ch);
if (curl_errno($ch)) {
echo 'cURL Error: ' . curl_error($ch);
}
curl_close($ch);
常用 CURLOPT 選項速查
| 選項 | 用途 |
| CURLOPT_URL | 目標網址 |
| CURLOPT_RETURNTRANSFER | 1=回傳字串, 0=直接輸出 |
| CURLOPT_POST | 1=啟用 POST |
| CURLOPT_POSTFIELDS | POST 資料 (字串或陣列) |
| CURLOPT_HTTPHEADER | 自訂 Header 陣列 |
| CURLOPT_REFERER | Referer 標頭 |
| CURLOPT_USERAGENT | User-Agent 標頭 |
| CURLOPT_TIMEOUT | 連線逾時 (秒) |
| CURLOPT_CONNECTTIMEOUT | 建立連線逾時 (秒) |
| CURLOPT_FOLLOWLOCATION | 1=自動追蹤重導向 |
| CURLOPT_MAXREDIRS | 最大重導向次數 |
| CURLOPT_COOKIEJAR/COOKIEFILE | Cookie 儲存/讀取檔案 |
| CURLOPT_SSL_VERIFYPEER | 0=不驗證 SSL 憑證 |
錯誤處理模式
$content = curl_exec($ch);
if ($content === false) {
$errno = curl_errno($ch);
$error = curl_error($ch);
// 記錄日誌、重試、拋出例外
}
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);