住宅代理

在 cURL 和 Postman 中设置住宅代理

这两款工具都能很好地处理代理,但都有一个设置会悄悄地把事情搞砸。以下是两者的可用配置,以及如何排查其余问题。

Chris Collins

Chris Collins

2026年8月31日 · 2 分钟阅读

在代理接入应用程序代码之前,值得先用一个可检查的工具来验证它是否正常工作。cURL 和 Postman 是大多数开发者会选择的两个工具,配置正确后两者都能很好地处理代理,但每个工具都有一个设置,一旦遗漏就会产生令人困惑的行为。以下是两者的可用配置、重要的调试标志,以及需要留意的陷阱。

连接细节在各处都是相同的:主机 p.shifter.io,端口 443,以及一个携带定向信息的用户名。格式说明请参见如何连接住宅代理

cURL

整个配置只需一个标志。

curl -x customer-USERNAME:PASSWORD@p.shifter.io:443 https://ipinfo.io/json

-x--proxy 是同一个东西。运行两次,地址应该会不同,这一步就能同时确认凭据和轮换都正常。

定向信息放在用户名里,因此命令的其他部分不会改变:

# 德国出口
curl -x customer-USERNAME-country-de:PASSWORD@p.shifter.io:443 https://ipinfo.io/json

# 粘性会话,十分钟
curl -x customer-USERNAME-country-de-sid-abc123-ttl-600:PASSWORD@p.shifter.io:443 https://ipinfo.io/json

让凭据不出现在 shell 历史中

把密码直接嵌入 URL 会让它出现在你的历史记录和任何进程列表中。以下是两个更好的选择:

# 单独传递凭据
curl -x p.shifter.io:443 -U customer-USERNAME-country-de:PASSWORD https://ipinfo.io/json

# 或从环境变量读取
export PROXY_USER="customer-USERNAME-country-de"
export PROXY_PASS="..."
curl -x p.shifter.io:443 -U "$PROXY_USER:$PROXY_PASS" https://ipinfo.io/json

请注意 -U 是代理凭据,而 -u 是目标网站的凭据。混淆两者是密码明明正确却出现 407 的常见原因。

值得了解的调试标志

# 查看代理握手过程以及认证是否成功
curl -v -x customer-USERNAME:PASSWORD@p.shifter.io:443 https://ipinfo.io/json

# 耗时分解:延迟究竟花在哪里
curl -o /dev/null -s -w "connect: %{time_connect}s  ttfb: %{time_starttransfer}s  total: %{time_total}s\n" \
  -x customer-USERNAME:PASSWORD@p.shifter.io:443 https://example.com

第二个命令是区分代理连接慢还是目标本身慢的最快方法,这也是为什么请求会超时中的第一个分支点,也是降低延迟的起点。

cURL 中的 SOCKS5,以及那个陷阱

如果你使用 SOCKS5 而不是 HTTP,协议前缀比看起来更重要:

# 会泄露 DNS:由你的机器解析主机名
curl -x socks5://customer-USERNAME:PASSWORD@p.shifter.io:443 https://example.com

# 正确做法:由代理解析
curl -x socks5h://customer-USERNAME:PASSWORD@p.shifter.io:443 https://example.com

那个 h 就是全部的区别,写错的话意味着你的 DNS 查询会从你自己的所在地发出,可能返回区域性错误的结果。详情见防止 DNS 泄露

一个绝不能带入正式环境的标志

--proxy-insecure 会禁用代理这一跳的证书验证。它偶尔可用于确认某个 TLS 错误是否属于证书问题而非其他原因,但绝不能出现在任何长期使用的配置中。

Postman

Postman 的代理支持很完善,但它是在应用程序设置中配置的,而不是针对单个请求配置,这一点会让期望在请求本身上设置代理的人感到意外。

配置方法

打开 Settings,然后进入 Proxy 标签页。关闭系统代理选项,启用自定义代理配置。将代理服务器设置为 p.shifter.io,端口设置为 443,勾选 HTTP 和 HTTPS,然后启用代理认证,输入你的用户名(包括任何定向标志)和密码。

该配置对整个 Postman 应用是全局生效的,这一点需要牢记:一旦设置,所有集合中的每个请求都会经过该代理,直到你关闭它。如果你同时在测试内部服务,它们也会被路由经过代理,这通常不是你想要的结果。

会破坏一切的那个设置

Settings 然后 General 中,有一个 SSL certificate verification 选项。如果你在使用代理时遇到证书错误并关闭了它,请记住你禁用的是 Postman 所有操作的验证,而不仅仅是被代理的请求。之后要记得重新打开。如果你确实遇到证书错误,这一点值得先弄清楚原因,而不是直接关掉验证。

无需重新输入即可切换定向

由于定向信息放在用户名中,更改国家只需编辑一个字段。Postman 变量可以让这变得不那么繁琐:定义一个环境,为代理用户名设置一个变量,然后切换环境即可切换市场。代理设置对话框支持变量语法,因此 customer-USERNAME-country-{{market}} 可以让你通过切换当前环境来更改国家,而不必每次都打开设置。

验证是否生效

https://ipinfo.io/json 发送一个 GET 请求并查看响应。它应该显示你所定向国家的地址,而不是你自己的地址。在用户名中不带 sid 的情况下发送两次,地址应该会变化。

如果地址是你自己的,说明代理根本没有生效:检查自定义代理配置是否确实已启用,以及 HTTP 和 HTTPS 是否都已勾选。

Collection Runner

如果要以稍大一些的量级进行测试,Collection Runner 会通过同一个代理配置重复运行一个集合。在各次迭代之间加入延迟,而不要不间断地全速运行,因为一连串相同的请求是让目标最快停止响应的方式,详见速率限制与请求节流

出现故障时

四种响应几乎涵盖了所有情况,每一种都指向具体的原因。

407 表示凭据被拒绝,或者用户名中的某个标志格式有误,因为一个无法识别的值会让整个用户名无法解析。先测试不带任何标志的裸用户名;如果可行,再逐个加回标志。完整流程见修复 407 错误

502 表示你的凭据没问题,但当时没有匹配你所设定筛选条件的资源。放宽条件,或者从城市级别降到国家级别。

509 表示套餐带宽已用尽且未启用超额。

连接被拒或挂起 表示你根本没有连接到网关。在怀疑是代理问题之前先检查 nc -vz p.shifter.io 443,并确认你没有指向一个过时的主机地址。

更全面的索引见常见住宅代理错误

从工具走向代码

一旦两个工具都能正常工作,同样的四个值可以直接迁移到你正在构建的任何程序中,客户端方面的模式见在 Python 中使用住宅代理。有一点不会直接迁移:在应用程序代码中,连接复用意味着通过已有隧道发送的请求会保持相同的出口地址,这看起来就像轮换失效了一样。这个意外情况在IP 不轮换中有详细说明。

总结

在 cURL 中,整套配置就是一个 -x,配合 -U 让凭据不出现在 URL 中,-v 查看握手过程,-w 用来判断延迟究竟来自代理还是目标本身;如果使用 SOCKS5,请使用 socks5h 以便由代理完成 DNS 解析。在 Postman 中,配置位于应用程序设置而非请求本身,因此它会全局生效,直到你手动关闭,而 SSL 验证开关是应用级别的,不是针对单个请求的。在两者中,定向信息都放在用户名里,因此切换国家从不需要更改主机、端口或其他任何内容。在把代理用进代码之前,先在一个可检查的工具中验证它是否正常工作,并按状态码来解读故障。

支撑这一切的网关是住宅代理,在所有国家和会话模式下使用同一个主机和一组凭据,按每 GB计费,因此测试只会消耗它实际用到的带宽成本。

准备好开始了吗?

试用 Shifter 住宅代理,205M+ 个 IP,195+ 个国家,低至 $0.75/GB。

立即开始