为什么使用 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.txtAPI本身能用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参数可显示连接步骤便于排查。