當前位置: 首頁> 最新文章列表> 如何在curl_close 中結合curl_setopt 設置代理服務器?

如何在curl_close 中結合curl_setopt 設置代理服務器?

gitbox 2025-05-26

在PHP 中, cURL是一個強大的庫,用於執行各種HTTP 請求。很多情況下,我們需要通過代理服務器發起請求,比如為了隱藏真實IP,或者訪問被限制的資源。本文將詳細講解如何在使用curl_close關閉cURL 會話時,結合curl_setopt函數設置代理服務器,實現請求代理。

一、cURL 基本流程回顧

使用cURL 發送請求的大致流程如下:

  1. 初始化會話: curl_init()

  2. 設置請求選項: curl_setopt()

  3. 執行請求: curl_exec()

  4. 關閉會話: curl_close()

本文的重點是如何在步驟2 中設置代理服務器。

二、使用curl_setopt 設置代理服務器

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_setoptCURLOPT_PROXY系列選項可以方便地設置代理服務器。

  • 代理地址應寫明域名或IP,端口可單獨設置。

  • 需要認證時,通過CURLOPT_PROXYUSERPWD提供用戶名密碼。

  • 代理類型根據需求設置,HTTP 是默認類型,SOCKS5 代理時需特別指定。

  • 使用完畢後,調用curl_close釋放資源。

這樣,你就可以在PHP 中靈活地使用cURL 配合代理服務器發起HTTP 請求,滿足各種網絡環境需求。