爬蟲、API 聯調、跨區域訪問等場景常需通過代理服務器轉發請求。本文展示如何在 PHP 中使用 cURL 配置 SOCKS5 代理(含認證),並設置常用請求頭模擬真實瀏覽器行為。
'value1', 'key2' => 'value2'];
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($param));
// 返回響應體而非直接輸出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// ====== 代理核心配置 ======
// 使用 HTTP 隧道模式(SOCKS5 必須)
curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, true);
// 代理認證方式
curl_setopt($curl, CURLOPT_PROXYAUTH, CURLAUTH_BASIC);
// 代理類型:SOCKS5
curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
// 代理服務器地址
curl_setopt($curl, CURLOPT_PROXY, "180.186.11.121");
// 代理端口
curl_setopt($curl, CURLOPT_PROXYPORT, "37211");
// 代理認證憑證:用戶名:密碼
curl_setopt($curl, CURLOPT_PROXYUSERPWD, "taras:taras-ss5");
// 執行請求
$result = curl_exec($curl);
// 錯誤處理
if ($result === false) {
echo 'cURL Error: ' . curl_error($curl);
} else {
echo $result;
}
curl_close($curl);
?>
| 選項 | 說明 |
|---|---|
CURLOPT_HTTPPROXYTUNNEL | 啟用 HTTP CONNECT 隧道,SOCKS5 代理必須設置為 true。 |
CURLOPT_PROXYTYPE | 代理協議:CURLPROXY_HTTP(默認)、CURLPROXY_SOCKS4、CURLPROXY_SOCKS5、CURLPROXY_SOCKS5_HOSTNAME(本地解析 DNS)。 |
CURLOPT_PROXYAUTH | 代理認證方法:CURLAUTH_BASIC、CURLAUTH_NTLM 等。 |
CURLOPT_PROXYUSERPWD | 格式 "username:password"。 |
telnet proxy_ip port。CURLAUTH_NTLM。CURLPROXY_SOCKS5_HOSTNAME 讓代理端解析域名。CURLOPT_SSL_VERIFYPEER(僅測試環境)。實際項目中建議封裝為 HttpClient 類,支持代理池輪換、超時重試、協程並發(Swoole/Workerman 環境下),並記錄請求日誌便於排查。