cURL 走代理最快的方式是 -x 参数(长格式 --proxy):
curl -x http://USER:PASS@GATEWAY:PORT https://api.ipify.org
api.ipify.org 会回显出口 IP——如果输出是你的代理 IP 而不是本机 IP,说明隧道已通。
代理 URL 语法
cURL 接受完整 URL 作为代理值,scheme 决定「你到代理之间」使用的协议:
http://user:pass@host:port # HTTP 代理(最常用)
https://user:pass@host:port # 到代理本身走 TLS
socks5://user:pass@host:port # SOCKS5,域名由本机解析
socks5h://user:pass@host:port # SOCKS5,域名在代理侧解析
socks5h:// 而不是 socks5://:带 h 表示 DNS 在代理侧解析,DNS 泄露和 CDN 调度错区的问题都不存在。HTTPS 目标走 HTTP 代理
对 https:// 目标,cURL 先向代理发 HTTP CONNECT 请求建立隧道,再在隧道内升级 TLS。代理看不到明文——所以用普通 HTTP 代理访问 HTTPS 网站是安全的:
curl -x http://USER:PASS@GATEWAY:PORT https://target-site.com -I
如果报 407 Proxy Authentication Required,是认证信息错或缺;报 CONNECT tunnel failed,是代理不允许该目标主机或端口。
环境变量
cURL(以及大部分 Unix 工具)认小写环境变量,一次设置全局生效:
export http_proxy="http://USER:PASS@GATEWAY:PORT"
export https_proxy="http://USER:PASS@GATEWAY:PORT"
export all_proxy="socks5h://USER:PASS@GATEWAY:PORT"
export no_proxy="localhost,127.0.0.1,.internal.example.com"
no_proxy 用于排除不走隧道的主机——记得把自家基础设施和健康检查地址加进去。
按项目隔离:.curlrc
环境变量会在项目之间串味,配置文件不会:
# ~/projects/shop-monitor/.curlrc
proxy = "http://USER:PASS@GATEWAY:PORT"
noproxy = "localhost,127.0.0.1"
curl -K ~/projects/shop-monitor/.curlrc https://target-site.com
验证目标看到的信息
出口 IP 只是一半,还要确认目标侧推断出的地理位置和 ASN:
curl -x http://USER:PASS@GATEWAY:PORT https://api.ipify.org
curl -x http://USER:PASS@GATEWAY:PORT "https://ipinfo.io/json" | head -20
轮换
用轮换网关时不需要在 cURL 里做轮换——供应商在网关侧换出口 IP。要固定会话(多次请求同一 IP),大多数供应商在用户名里加 session 标记即可,cURL 侧只要复用同一组凭据:
for i in 1 2 3; do
curl -s -x http://USER-SESSION-abc123:PASS@GATEWAY:PORT https://api.ipify.org; echo
done
常见报错速查
| 报错 | 含义 | 处理 |
|---|---|---|
| 407 Proxy Authentication Required | 凭据错误或缺失 | 检查用户名密码,特殊字符要 URL 编码(@ 写成 %40) |
| CONNECT tunnel failed | 代理拒绝目标主机/端口 | 确认套餐支持 HTTPS、443 端口未受限 |
| 56 Recv failure | 传输中途连接被重置 | 换一个会话 IP 重试;降低并发 |
| 仅走代理时 TLS 报错 | 代理或中间盒劫持 TLS | 改用 socks5h:// 或支持 TLS 的代理入口 |
常见问题
HTTPS 网站能用 -x 吗?
可以。对 https:// 目标,cURL 先通过代理建立 HTTP CONNECT 隧道再升级 TLS,代理看不到明文。普通 http:// 代理即可访问 HTTPS 目标。
curl 里 socks5 和 socks5h 的区别?
socks5 在本机解析 DNS,socks5h 在代理侧解析。采集场景用 socks5h,避免 DNS 泄露和 CDN 调度错区。
cURL 怎么轮换 IP?
不需要自己做——轮换网关在服务端换出口 IP。要固定 IP 时在用户名里加 session 标记并复用同一组凭据。
407 Proxy Authentication Required 是什么意思?
代理拒绝了你的凭据。检查代理 URL 中 user:pass 部分,特殊字符需 URL 编码(如 @ 写成 %40)。
想找个真实池子练手?IPLight 动态住宅代理 $1.20/GB 起(量大低至 $0.72/GB),覆盖 170+ 国家——查看价格或实时池深报告。