HTTP 請求中的 X-Forwarded-For、Client-IP、Referer 等標頭,常被伺服器用來識別客戶端真實 IP 與來源頁面。透過 PHP cURL 的 CURLOPT_HTTPHEADER 選項,我們可以自訂這些標頭,實現「偽造 IP」與「偽造來源」的效果。這在 API 測試、爬蟲開發、繞過簡單存取控制等場景極為實用。
<?php
$ch = curl_init();
// 目標 URL
curl_setopt($ch, CURLOPT_URL, 'https://localhost/2.php');
// 偽造客戶端 IP(常見標頭)
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-FORWARDED-FOR: 8.8.8.8',
'CLIENT-IP: 8.8.8.8'
]);
// 偽造來源頁面
curl_setopt($ch, CURLOPT_REFERER, 'https://www.example.com/');
// 回傳結果而非直接輸出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1); // 包含回應標頭
$output = curl_exec($ch);
curl_close($ch);
echo $output;
?>
<?php
function getClientIp() {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) return $_SERVER['HTTP_CLIENT_IP'];
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) return $_SERVER['HTTP_X_FORWARDED_FOR'];
return $_SERVER['REMOTE_ADDR'] ?? 'unknown';
}
echo "IP: " . getClientIp() . "\n";
echo "Referer: " . ($_SERVER['HTTP_REFERER'] ?? 'none') . "\n";
?>
IP: 8.8.8.8
Referer: https://www.example.com/
僅偽造 IP 與 Referer 往往不足以通過嚴格的反爬蟲機制。建議同時設定以下選項:
<?php
$ch = curl_init('https://api.target.com/data');
$headers = [
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
'Accept: application/json, text/plain, */*',
'Accept-Language: zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7',
'X-FORWARDED-FOR: 203.0.113.45',
'CLIENT-IP: 203.0.113.45',
'Referer: https://www.google.com/',
'Origin: https://www.google.com',
];
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => $headers,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_SSL_VERIFYPEER => false, // 僅測試環境使用,生產環境請驗證憑證
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_TIMEOUT => 10,
CURLOPT_COOKIEJAR => 'cookies.txt', // 自動處理 Cookie
CURLOPT_COOKIEFILE => 'cookies.txt',
]);
$response = curl_exec($ch);
if (curl_errno($ch)) {
throw new Exception('cURL Error: ' . curl_error($ch));
}
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
| 選項 | 說明 |
|---|---|
CURLOPT_URL | 請求目標網址 |
CURLOPT_HTTPHEADER | 自訂請求標頭陣列 |
CURLOPT_REFERER | 設定 Referer 標頭 |
CURLOPT_USERAGENT | 設定 User-Agent |
CURLOPT_RETURNTRANSFER | true 時回傳字串,false 直接輸出 |
CURLOPT_POST | 啟用 POST 請求 |
CURLOPT_POSTFIELDS | POST 資料(陣列或字串) |
CURLOPT_COOKIEJAR/FILE | Cookie 儲存/讀取檔案 |
CURLOPT_FOLLOWLOCATION | 自動追蹤 3xx 重導向 |
CURLOPT_TIMEOUT | 最大執行秒數 |
CURLOPT_SSL_VERIFYPEER | 驗證 SSL 憑證(生產環境必須為 true) |
REMOTE_ADDR(TCP 連線真實 IP),將 X-Forwarded-For 視為參考,並驗證代理鏈路可信度。PHP cURL 配合 CURLOPT_HTTPHEADER 與 CURLOPT_REFERER,能輕鬆實現 IP 與來源偽造。結合 User-Agent、Cookie、SSL 設定,可構建高度擬真的瀏覽器請求。開發者應善用此技術進行介面測試與資料整合,並嚴守法律與道德底線。