Socks5Proxy

cURL 代理使用教學,在命令列中測試 HTTP 和 SOCKS5 代理

本指南提供cURL連接Socks5Proxy的HTTP與SOCKS5代理、帳密認證、響應時間測量,以及批次檢查代理列表的Shell腳本實作。

為何推薦使用 cURL 測試代理?

cURL 幾乎安裝於所有伺服器和開發環境,是測試代理是否正常運作的最快工具。當程式或瀏覽器設定出現問題時,用 cURL 測試相同設定可立即判斷是代理問題還是程式問題。

範例使用 IP 198.51.100.23,HTTP 端口 8000,SOCKS5 端口 1080,帳號 spx_user,密碼 spx_pass。

如何連接 HTTP 代理?

在 -x (或 --proxy) 參數填入代理地址。帳號密碼可直接嵌入地址,或用 -U 參數單獨設定。請求 HTTPS 地址時,cURL 會建立 CONNECT 隧道並在其中加密傳送請求。

# user and password inside the proxy URL
curl -x http://spx_user:spx_pass@198.51.100.23:8000 https://api.ipify.org

# or with -U
curl -x http://198.51.100.23:8000 -U spx_user:spx_pass https://api.ipify.org

如何連接 SOCKS5 代理?

--socks5-hostname 會由代理端解析域名。您的伺服器 DNS 請求不會外洩,且會依代理所在國家解析名稱。--socks5 則會先由您的伺服器解析名稱後,僅傳送 IP 至代理。多數情況下推薦使用 --socks5-hostname。

地址格式socks5h://放入-x參數也能得到相同結果。

# DNS is resolved by the proxy
curl --socks5-hostname 198.51.100.23:1080 --proxy-user spx_user:spx_pass https://api.ipify.org

# same thing with a proxy URL
curl -x socks5h://spx_user:spx_pass@198.51.100.23:1080 https://api.ipify.org

如何同時查看響應時間與狀態?

-w 參數可輸出連線時間、首字節時間、總時間與回應代碼於一行。比較多國代理速度,或區分是目標網站還是代理本身較慢時非常實用。

使用 -o /dev/null 捨棄主體內容,加上 -s 關閉進度顯示,就能乾淨地只顯示結果。

curl -s -o /dev/null \
  -x http://spx_user:spx_pass@198.51.100.23:8000 \
  -w "code=%{http_code} connect=%{time_connect}s ttfb=%{time_starttransfer}s total=%{time_total}s\n" \
  https://example.com/

如何一次檢查所有清單?

透過API獲取列表並逐行執行cURL,可一次檢查所有代理狀態。以下腳本接收ip:port:user:pass格式列表,輸出每行的回應IP與耗時。設定超時以避免無回應時卡住。

#!/bin/sh
KEY="YOUR_API_KEY"
curl -s -H "Authorization: Bearer $KEY" \
  "https://socks5proxy.io/api/v1/proxies/download?format=ip:port:user:pass&protocol=http" > proxies.txt

while IFS=: read -r ip port user pass; do
  out=$(curl -s -m 15 -x "http://$user:$pass@$ip:$port" -w " %{time_total}s" https://api.ipify.org)
  echo "$ip:$port $out"
done < proxies.txt

API本身是否可用cURL呼叫?

是的。檢查餘額、活躍計劃列表和代理列表,都可以使用Authorization: Bearer標頭進行呼叫。JSON回應可以使用jq等工具篩選所需欄位。

curl -H "Authorization: Bearer YOUR_API_KEY" https://socks5proxy.io/api/v1/account
curl -H "Authorization: Bearer YOUR_API_KEY" "https://socks5proxy.io/api/v1/proxies?country=us&protocol=socks5"

是否可以使用環境變數設定代理?

是的。cURL和許多命令行工具會讀取http_proxy、https_proxy和all_proxy環境變數。在shell中設定一次後,該shell中執行的cURL、wget、pip等工具都會使用相同的代理。SOCKS5則需在all_proxy中填入socks5h://地址。

請在 no_proxy 以逗號列出不需經代理的地址,避免內部伺服器或 localhost 的流量誤經代理傳出。

export https_proxy="http://spx_user:spx_pass@198.51.100.23:8000"
export http_proxy="$https_proxy"
export no_proxy="localhost,127.0.0.1"
curl https://api.ipify.org

# SOCKS5 for every tool that reads all_proxy
export all_proxy="socks5h://spx_user:spx_pass@198.51.100.23:1080"

如何比較 HTTP 代理與 SOCKS5 代理的結果?

使用相同IP的兩個端口向同一地址發送請求,比較響應IP和時間,可以了解在您的環境中哪種方式更快。大多數情況下相似,但如果目標服務器較遠或DNS解析較慢,可能會有所不同。

兩種方式的響應IP應相同。若不一致可能是混用不同端口,請重新檢查列表。

for p in "http://spx_user:spx_pass@198.51.100.23:8000" "socks5h://spx_user:spx_pass@198.51.100.23:1080"; do
  curl -s -m 15 -x "$p" -w "  %{time_total}s\n" https://api.ipify.org
done

如何確認伺服器用於IP授權的IP?

IP 授權註冊的值是您的伺服器連接到網際網路時使用的公共 IPv4。在不使用代理的情況下執行 curl -4 https://api.ipify.org 即可立即確認此值。將此值註冊到儀表板的 IP 授權欄位後,該伺服器即可無需用戶名與密碼進行連接。

curl -4 -s https://api.ipify.org

代理能查看 HTTPS 網站內容嗎?

使用 HTTP 代理請求 HTTPS 地址時,cURL 會先以 CONNECT 建立與目標伺服器的隧道,再於隧道內直接建立加密連接。代理僅知連接目標,無法查看加密內容。-v 參數可顯示 CONNECT 階段與後續加密流程。

SOCKS5 同理。代理只轉發連接,加密是在 cURL 與目標伺服器間進行。因此不建議使用證書驗證跳過選項(-k),因為透過代理後仍會驗證目標伺服器的原始證書。

使用 --socks5-hostname 時,連線目標的域名也會由代理解析,因此您的伺服器 DNS 查詢記錄中不會留存。

curl -v -o /dev/null -x http://spx_user:spx_pass@198.51.100.23:8000 https://example.com/ 2>&1 | grep -E "CONNECT|HTTP/|SSL connection"

如何解讀 cURL 錯誤訊息?

Received HTTP code 407 from proxy after CONNECT 表示認證失敗。請檢查用戶名和密碼,或 IP 授權中註冊的伺服器 IP。若密碼包含 @ 或 :,請勿將其放入地址中,應使用 -U 或 --proxy-user 來輸入。

Failed to connect 或 Connection timed out 可能是端口錯誤或伺服器防火牆阻擋連出。請確認 HTTP 地址使用 HTTP 端口、SOCKS5 使用 SOCKS5 端口,且出站端口已開放。-v 參數可顯示連線階段細節,便於排查問題。

cURL 代理使用教學,-x 與 SOCKS5 連線確認 | Socks5Proxy