快速入门

先复制控制台里的代理地址,用 curl 发出一次请求,确认返回的是代理的出口 IP,而不是本机 IP。接入方式二选一:账号密码认证适用于所有产品和任何网络;运行程序的公网 IP 固定时,也可以用 IP 白名单。免费套餐可完成本页的固定 IP HTTP 示例,无需绑卡。AdsPower、比特浏览器和 Hubstudio 的填写步骤见各自的教程页。

先发一次请求

  1. 注册账号并完成邮箱验证,免费套餐的 IP 在验证通过后才发放。打开控制台的“Proxies”(我的代理)页面,在“Connect”(接入信息)区域把“Copy as”(复制格式)设为 url、协议选 HTTP,最上面一行就是完整的代理地址,格式为 http://USERNAME:PASSWORD@HOST:PORT。请用复制按钮,不要在网页上拖动选中:拖选的文字可能带有看不见的空格或弯引号,粘贴后认证失败。
  2. 直连查一次本机 IP,记下返回值。--noproxy '*' 让 curl 忽略 ALL_PROXY、HTTPS_PROXY 等环境变量,否则本机已有的代理会让这一步返回另一个代理的 IP,后面的对比就不成立;--connect-timeout 和 --max-time 限定等待秒数,命令不会一直挂着。这几个参数只作用于本条命令,不改动系统代理设置。

    bash
    curl --noproxy '*' --connect-timeout 10 --max-time 30 https://api.ipify.org
    PowerShell
    curl.exe --% --noproxy "*" --connect-timeout 10 --max-time 30 https://api.ipify.org

    Windows 请在 PowerShell 中使用 curl.exe:Windows PowerShell 里的 curl 可能是 Invoke-WebRequest 的别名,不是 curl 本身。--% 让 PowerShell 把后面的参数原样交给 curl.exe;在 cmd 中去掉 --% 即可,其余不变。

  3. 把复制的代理地址粘贴到 -x 后面,通过代理再查一次。--noproxy '' 清空忽略列表,避免 NO_PROXY 环境变量让 curl 绕过刚指定的代理。

    将 USERNAME 和 PASSWORD 替换为控制台显示的账号密码,HOST 和 PORT 替换为代理地址和端口:固定 IP 产品填该 IP 所在行的地址和端口,动态代理和住宅代理填网关地址和端口。Node4 的用户名和密码只含字母、数字、下划线和连字符,手动拼接时原样写入即可;粘贴“Connect”区域的 url 形式最省事。

    bash
    curl --noproxy '' --connect-timeout 10 --max-time 30 -x 'http://USERNAME:PASSWORD@HOST:PORT' https://api.ipify.org
    PowerShell
    curl.exe --% --noproxy "" --connect-timeout 10 --max-time 30 -x "http://USERNAME:PASSWORD@HOST:PORT" https://api.ipify.org

返回的 IP 和直连那次不同,就是接入成功:请求已经从代理的出口 IP 发出,可以把同样的地址填进浏览器或脚本了。两次相同、返回 407 或超时,见下方“排查”。

动态代理和住宅代理通过网关地址接入,需要已购买对应套餐;免费套餐连接网关会返回 407。以动态数据中心代理(Rotating Datacenter)的 HTTP 网关为例:

bash
curl --noproxy '' --connect-timeout 10 --max-time 30 -x 'http://USERNAME:PASSWORD@gw-rotating_datacenter.node4.io:8083' https://api.ipify.org
PowerShell
curl.exe --% --noproxy "" --connect-timeout 10 --max-time 30 -x "http://USERNAME:PASSWORD@gw-rotating_datacenter.node4.io:8083" https://api.ipify.org

方式一:账密认证(用户名和密码)

  1. 账号密码通用于账号下全部生效中的产品:只有一组用户名和密码,不按产品区分,也可在“Account Settings > Auth & IP Access”(账号设置 > 代理认证)中查看。固定 IP 产品(免费套餐、共享数据中心代理、独享数据中心代理)每个 IP 有自己的代理地址和端口,完整列表在“Proxies”页面下方;动态代理和住宅代理只有一个固定的网关地址和端口。
  2. 工具要求分开填写时,复制“Connect”区域下方的代理地址、端口、用户名和密码四项,同样用复制按钮。粘贴后认证失败、返回 407,多半是密码没有完整复制。
  3. HTTP 和 HTTPS 共用一个端口:访问 HTTPS 网站也填 HTTP 代理端口,没有单独的 HTTPS 端口。付费套餐需要 SOCKS5 时在“Connect”区域切换协议,端口会随之变化;免费套餐仅支持 HTTP(S)。

方式二:IP 白名单认证(不填账号密码)

  1. 先确认代理会看到的出口地址:在真正跑流量的那台机器上执行“先发一次请求”里的直连命令(带 --noproxy '*' 的那条),记下返回的 IP。在笔记本上查、流量却跑在服务器上,加的就是错误的地址;同一机房的两台服务器出口也可能不同,每个不同的地址都要单独添加。
  2. 打开“Account Settings > Auth & IP Access”(账号设置 > 代理认证),在 IP 白名单中添加该地址。只能添加单个 IP,不支持 IP 段;一个地址在整个平台上只能加入一个账号的白名单。付费套餐可添加 3 个白名单 IP,不够时可在同一位置购买更多名额;免费套餐名额更少,以控制台显示为准。
  3. 从白名单中的地址连接时,用户名和密码留空。两种方式是二选一,不是叠加:账号密码正确,从任何地址连接都可以;不带账号密码,只有白名单中的地址可以;两者都不满足,代理返回 407。
  4. 白名单方式下各产品保留的功能不同。固定 IP 产品功能不受影响。动态数据中心代理和不限流量动态代理可以只填用户名、密码留空,保留指定国家/地区和会话保持。住宅代理则用户名和密码都留空,此时出口不指定国家/地区、城市和 session,在整个 IP 池内按连接自动轮换;要指定国家/地区、城市或会话保持,仍需用账号密码。
  5. 白名单适合 IP 固定的服务器。家庭宽带、托管的 CI 运行器、按节点出网的容器集群,公网 IP 会在不知情时变化:某天早上突然认证失败、代码却没改过,多半就是地址变了。这些环境请用账号密码。

排查

两次结果相同:先确认直连那次没有走系统或环境代理(直连命令带 --noproxy '*' 就是为了这一点),再检查程序是否真的连上了所填代理。常见原因:NO_PROXY 或 no_proxy 环境变量包含了目标域名;工具只给 HTTP 设了代理、HTTPS 没设;系统级代理设置覆盖了程序里的设置;http:// 前缀写错。代理参数写错时,有的程序直接报错,有的悄悄改为直连,表现因程序而异,不能只凭“请求成功”判断走了代理。

返回 407:代理拒绝了认证。核对用户名和密码是否完整复制、连接的地址是否在白名单内,以及该产品的套餐是否生效中;没有购买对应套餐时(例如用免费套餐的账号连接动态或住宅网关),同样返回 407,与密码错误的表现一样。

超时或连接被拒绝:超时可能发生在连接代理、建立 CONNECT 隧道或等待目标网站响应的任一阶段,单看超时判断不出卡在哪一步,也不等于请求没有到达代理。连接被拒绝通常是地址或端口不对,按控制台中该代理所在行核对。

用 -v 看停在哪一步:在命令里加 -v,curl 会打印连接代理、发出 CONNECT、隧道建立、收到响应的全过程,输出停在哪一步,问题就在那一步附近。把输出贴进工单前,请删掉其中的 Proxy-Authorization 一行,并把命令里的密码换回 PASSWORD:那一行 Basic 后面是账号密码的 Base64 编码,任何人都能还原。

同一条命令跑两次:固定 IP 产品(含免费套餐)两次出口 IP 相同;动态代理的网关两次通常不同,因为每次运行都新建一个 HTTPS 隧道,网关按隧道分配出口,这是产品正常工作的表现。用 IP 查询地址做第一个目标,是因为它的返回值就是结论;换成真实网站,走代理和不走代理返回的内容一样,看不出区别。

Python 示例(requests)

示例使用 requests 库。proxies 字典里 http 和 https 两项都填同一个以 http:// 开头的代理地址:HTTPS 请求也走 HTTP 代理端口,由代理建立 CONNECT 隧道。USERNAME、PASSWORD、HOST、PORT 四个占位符的替换方法同上面的 curl 示例;timeout 限定等待秒数。requests 也会读取 HTTP_PROXY、HTTPS_PROXY、NO_PROXY 等环境变量:像示例这样显式传入 proxies 时以 proxies 为准,不受 NO_PROXY 影响;不传 proxies 时才跟随环境变量。建议把账号密码放在环境变量里,不要写进代码。

Python
import requests

proxy = "http://USERNAME:PASSWORD@HOST:PORT"
proxies = {"http": proxy, "https": proxy}

r = requests.get("https://api.ipify.org", proxies=proxies, timeout=30)
print(r.text)