一行命令即可完成#
curl -x http://USER-cc-us:[email protected]:9000 https://api.ipify.org-x(或 --proxy)接收内嵌凭据的代理 URL。cURL 会自动使用 CONNECT 为 HTTPS 目标建立隧道,并让代理解析主机名。
值得掌握的参数#
| 参数 | 用途 |
|---|---|
| -x, --proxy URL | 指定代理:协议、主机、端口,以及可选的凭据 |
| -U, --proxy-user user:pass | 单独提供凭据,适合密码含特殊字符的情况 |
| --proxy-basic | 强制使用 Basic 代理身份验证(提供密码时的默认方式) |
| -v | 显示 CONNECT 交互、代理状态码和响应标头 |
| --noproxy '*' | 本次调用忽略代理环境变量 |
| -w '%{time_total}\n' | 输出耗时,以便比较不同出口 |
SOCKS5 与远程 DNS#
# 在出口端解析主机名(推荐)
curl -x socks5h://USER-cc-de:[email protected]:9001 https://api.ipify.org
# 在本地解析主机名,再将 IP 发送给代理(会泄露 DNS 查询)
curl -x socks5://USER-cc-de:[email protected]:9001 https://api.ipify.org环境变量#
调用 cURL 的工具以及许多其他工具都遵循 http_proxy、https_proxy 和 no_proxy。在一个工作会话开始时导出一次即可。
export https_proxy="http://USER-cc-us:[email protected]:9000"
export http_proxy="$https_proxy"
export no_proxy="localhost,127.0.0.1"
curl https://api.ipify.org # 无需 -x 即可走代理解读故障信息#
curl -v -x http://USER:[email protected]:9000 https://api.ipify.org 2>&1 | grep -E "CONNECT|HTTP/1.1 4|HTTP/1.1 5"
# < HTTP/1.1 407 Proxy Authentication Required -> 凭据错误
# < HTTP/1.1 400 Bad Request -> 用户名参数错误
# < HTTP/1.1 502 Bad Gateway -> 该位置没有出口;扩大范围CONNECT 行上的状态来自网关;Connection established 之后的状态来自目标网站。错误说明页面列出了每个网关状态码的含义。
在循环中轮换会话#
for i in $(seq 1 5); do
curl -s -x "http://USER-cc-us-sid-run$i-ttl-5m:[email protected]:9000" https://api.ipify.org
echo
done # 五个不同的美国出口;每个出口均可凭其 ID 复用五分钟大家常问的问题#
通过代理访问 HTTPS 时,cURL 是否需要特殊参数?
不需要。使用 http:// 代理 URL 时,cURL 会自动为 https:// 目标发送 CONNECT;只有在普通 HTTP 上强制建立隧道时才需要 --proxytunnel。
密码包含 @ 或 :,导致 cURL 失败。
请使用 -U user:pass 传入凭据,不要将其嵌入 URL;也可以对特殊字符进行 URL 编码。