住宅代理如何指定国家、城市和会话参数

住宅代理(Residential)只有一个固定的网关地址,出口在哪个国家/地区、哪个城市,由用户名后面的参数决定,密码不变。例如用户名是 USERNAME,填 USERNAME-country-us 就是美国出口,填 USERNAME-country-us-state-ca-city-losangeles 就是洛杉矶出口。本文说明五个参数的写法和限制、怎么验证出口确实在指定地区,以及检测结果和预期不一致时该怎么判断。

准备工作

  • 账号下有生效中的住宅代理套餐。免费套餐和数据中心套餐的账号连接住宅网关会返回 407,参数再正确也不会生效。
  • 一组账号密码:在控制台“我的代理”页面的住宅代理标签页查看。IP 白名单方式连接住宅网关时没有用户名可写参数,出口在整个 IP 池内按连接自动轮换,所以指定地区必须用账号密码。
  • 网关地址和端口:gw-residential.node4.io,HTTP 端口 8082,SOCKS5 端口 1082。两种协议的参数写法完全相同。
  • “我的代理”页面“接入信息”面板里有“定位”设置:选国家/地区、州、城市,开启“会话保持”,参数会自动附加到用户名上,直接复制即可。手写参数时请对照下面的规则。

操作步骤

  1. 五个参数和它们的取值

    参数以半角连字符接在用户名后面,键和值交替出现:USERNAME-键-值-键-值。五个键如下表,顺序随意,每个键最多出现一次,所有键都小写。

    每个地区参数都是一层筛选,层层相交:-country-us-city-losangeles 要求出口同时满足两个条件,加的参数越多,可选出口越少。-country-de-city-losangeles 没有交集,会被拒绝,不会自动按其中一个处理。城市名在全球并不唯一,-city- 请始终和 -country- 一起写。

    session 不缩小范围,它在符合条件的出口里固定一个,供后续请求复用。

    字段填写内容
    -country-两个字母的国家/地区代码,例如 us、gb(英国是 gb,不是 uk)、de、jp。三个字母的代码无效
    -state-州或省的代码,2 到 3 个字母或数字,常用于美国的州,例如 -country-us-state-tx
    -city-城市名,只能用小写字母和数字,最长 64 位,去掉空格、重音和标点:saopaulo、stlouis、newyork
    -asn-运营商的自治系统号,纯数字,不带 AS 前缀,不带前导零,例如 -country-de-asn-3320
    -session-会话保持:自己取的一串字母和数字,相同的值在保持期内尽量复用同一个出口,最长 30 分钟
  2. 同名城市必须带上州

    同一个国家里有多个同名城市时,只写 -city- 会被拒绝,必须加 -state-。美国尤其常见:-country-us-city-dallas 会失败,-country-us-state-tx-city-dallas 才能拿到得州达拉斯的出口。哥伦比亚的波哥大同理:-country-co-city-bogota 会失败,要写 -country-co-state-dc-city-bogota。

    走 HTTPS 时这种拒绝表现为 CONNECT 隧道返回 502,看不到原因;走 SOCKS5 则是一个“不允许”回复,和密码错误的回复相同。所以某个城市参数每次都失败、换别的城市却正常时,先加上州再试。

    哪些城市可选、州代码怎么写,以“接入信息”面板“定位”设置给出的列表为准;它基于当前的覆盖快照,只列出预计有出口的城市。手写的参数可以写出任何合法形式,包括没有出口的城市,这种情况也会被拒绝。

  3. 填进代理地址或程序里

    参数接在用户名后面,密码和网关地址都不变。以 HTTP 网关为例,完整的代理地址形如:

    http://USERNAME-country-us-state-ca-city-losangeles:PASSWORD@gw-residential.node4.io:8082

    在 AdsPower、比特浏览器、Hubstudio 里,把带参数的用户名填进“代理账号”,“代理密码”照常填写。在 curl 里放在 -x 后面;在 Python 的 requests 里放进 proxies 字典的两个值。每个窗口或每个任务可以用不同的参数,网关按每次连接携带的用户名决定出口。

    地区参数变了,session 值也请换一个新的:旧的 session 固定的是旧地区的出口。

  4. 验证出口

    通过代理访问 ipinfo.io/json 或 ping0.cc,看返回的国家/地区和城市。

    两点需要知道。一是 IP 归属地来自多家商业数据库,彼此并不一致:国家级别基本可靠,城市级别经常有出入,您的目标网站用的库也未必是您查的那一个。指定了国家却显示另一个国家,值得提交工单;城市显示在相邻的区或郊区,属于正常误差。二是出口会随时间变化,长时间任务请在开始时验证,过程中定期再查,并把每批数据对应的出口记下来。

    指定地区只是让请求从该地的网络发出,不会同时带来当地账号、收货地址、支付方式或语言设置;目标网站从这些信号判断访客,本地 IP 只是其中一项。

网关所在地、出口所在地、访客所在地是三回事

网关地址 gw-residential.node4.io 解析到 Node4 的美国节点,这是您的程序连接的地方;出口 IP 是目标网站看到的地址,由参数决定,可以在任何支持的国家/地区;您自己的电脑在哪里,对出口没有影响。用检测工具查看时,看到的是出口 IP,不是网关 IP。

参数合法但当时没有可用出口时,请求同样会被拒绝,不会悄悄换一个相近的地区。住宅出口是真实的家庭设备,随时上线下线:一个小城市中午有出口,当地凌晨可能一个都没有。把拒绝理解为“现在没有”,任务允许的话在程序里逐级放宽(城市、州、国家),并记录每条数据是在哪一级拿到的。Node4 不承诺任何城市随时都有出口。

会话保持的实际行为

相同的 -session- 值在保持期内尽量复用同一个出口,最长 30 分钟,从首次分配开始计算,中途有请求也不会延长。出口设备掉线时会提前结束,而且在上限到期前,这个 session 值不会换到另一台设备上,所以同一个 session 连续失败时,请换一个新值,不要等。

不同的 session 值各自分配出口,分到的出口不保证不同。session 值只在您的账号内有效,和其他客户用了同一个值也互不影响。按任务取值最合适:一个登录流程一个值,任务结束就丢掉;不要让一天的全部流量都挂在一个 session 上。

常见问题

指定了美国,为什么显示的是别的国家?

先确认参数确实生效:用不带参数的用户名和带 -country-us 的用户名各查一次出口,两次国家不同才说明参数在起作用。两次相同且都不是美国,检查是不是用白名单方式连接(没有用户名就没有参数),或者程序读取了环境变量里另一个代理。参数生效却仍显示错误国家,请提交工单并附上检测结果。

某个城市一直失败,换别的城市就正常?

两种常见原因。一是同名城市没带州:加上 -state-<州代码> 再试。二是该城市当时没有出口在线:换个时间再试,或先放宽到州或国家。城市是否在支持列表里,以“接入信息”面板“定位”设置的列表为准。

-session- 用了同一个值,IP 还是变了?

会话保持属于尽量保持,不作保证:上限 30 分钟到期后会分配新出口;设备掉线时会提前结束。如果地区参数中途改了,session 也应该换新值。需要几天不变的 IP,请用独享数据中心代理。

可以只写城市不写国家吗?

不建议。城市名在全球不唯一,-city- 请始终与 -country- 一起写;美国等有同名城市的国家还要加 -state-。

免费套餐可以试住宅代理的城市定位吗?

不可以。免费套餐是共享数据中心 IP,连接住宅网关会返回 407。城市定位需要生效中的住宅代理套餐,所有规格的住宅套餐都包含国家/地区、州、城市、ASN 和会话保持。

SOCKS5 下参数写法一样吗?

一样。网关地址不变,端口换成 1082,用户名同样带参数。区别只在报错方式:SOCKS5 没有状态码,参数错误、没有出口和密码错误都表现为同一种“不允许”回复,排查时建议先用 HTTP 端口试一次,能看到 400、407 或 502。