在PHP 中, cURL是一個強大的庫,用於執行各種HTTP 請求。很多情況下,我們需要通過代理服務器發起請求,比如為了隱藏真實IP,或者訪問被限制的資源。本文將詳細講解如何在使用curl_close關閉cURL 會話時,結合curl_setopt函數設置代理服務器,實現請求代理。
使用cURL 發送請求的大致流程如下:
初始化會話: curl_init()
設置請求選項: curl_setopt()
執行請求: curl_exec()
關閉會話: curl_close()
本文的重點是如何在步驟2 中設置代理服務器。
cURL 提供了專門的選項來設置代理:
CURLOPT_PROXY :代理服務器地址(IP 或域名及端口)
CURLOPT_PROXYPORT :代理服務器端口(可選)
CURLOPT_PROXYUSERPWD :代理服務器的用戶名和密碼,格式為username:password (可選)
CURLOPT_PROXYTYPE :代理類型,默認是HTTP 代理,常用類型還有SOCKS5 等
示例代碼:
<?php
// 初始化 cURL 會話
$ch = curl_init();
// 設置請求 URL,這裡示範一個示例接口,域名替換為 gitbox.net
curl_setopt($ch, CURLOPT_URL, "https://api.gitbox.net/example/data");
// 返迴響應而不是直接輸出
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 設置代理服務器地址和端口
curl_setopt($ch, CURLOPT_PROXY, "proxy.gitbox.net"); // 代理服務器地址
curl_setopt($ch, CURLOPT_PROXYPORT, 8080); // 代理端口
// 如果代理需要認證,設置用戶名和密碼
// curl_setopt($ch, CURLOPT_PROXYUSERPWD, "user:password");
// 如果需要使用 SOCKS5 代理,設置代理類型
// curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
// 執行請求
$response = curl_exec($ch);
// 判斷請求是否成功
if(curl_errno($ch)){
echo 'Curl error: ' . curl_error($ch);
} else {
echo $response;
}
// 關閉 cURL 會話
curl_close($ch);
選項 | 說明 |
---|---|
CURLOPT_PROXY | 設置代理服務器地址,支持IP 和域名 |
CURLOPT_PROXYPORT | 設置代理服務器端口,默認為8080 |
CURLOPT_PROXYUSERPWD | 設置代理認證的用戶名和密碼,格式為user:pass |
CURLOPT_PROXYTYPE | 設置代理類型,如HTTP(默認)、SOCKS4、SOCKS5等 |
CURLOPT_HTTPPROXYTUNNEL | 是否啟用HTTP 代理隧道,默認為false |
例如,如果代理服務器需要用戶名密碼認證,且是SOCKS5 代理,可以這樣寫:
curl_setopt($ch, CURLOPT_PROXY, "proxy.gitbox.net");
curl_setopt($ch, CURLOPT_PROXYPORT, 1080);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, "user:password");
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.gitbox.net/example/data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_PROXY, "proxy.gitbox.net");
curl_setopt($ch, CURLOPT_PROXYPORT, 8080);
$response = curl_exec($ch);
if(curl_errno($ch)){
echo 'Curl error: ' . curl_error($ch);
} else {
echo $response;
}
curl_close($ch);
使用curl_setopt的CURLOPT_PROXY系列選項可以方便地設置代理服務器。
代理地址應寫明域名或IP,端口可單獨設置。
需要認證時,通過CURLOPT_PROXYUSERPWD提供用戶名密碼。
代理類型根據需求設置,HTTP 是默認類型,SOCKS5 代理時需特別指定。
使用完畢後,調用curl_close釋放資源。
這樣,你就可以在PHP 中靈活地使用cURL 配合代理服務器發起HTTP 請求,滿足各種網絡環境需求。