IP Router
原理 · 入门

网站按 IP 判断你。这是给智能体选出口 IP 的交换机。

网上每台设备都有地址。搜索、商店、广告、新闻用它决定你看到什么 — 货币、语言、排名,甚至页面能不能加载。数据中心里的 AI 智能体只有一个地址:那座机房。没有本地出口,每次 fetch 都像从同一栋楼发出。

你指定国家或城市。IP Router 在那里选一个出口,请求从那张 IP 出去,再把页面交回。JSON 智能体和真浏览器共用同一套脑子。

想法

四个事实,其余就能用。

网站看不到你的笔记本

它看到的是出口 IP。换出口,页面就变 — 价格、SERP、门店定位、付费墙,全变。

国家不是语言

cc-JP 把你放到日本 IP。lang-ja 告诉站点你读日语。通常两个都要。

Sticky 表示「同一个人」

登录、购物车、cookie 会在中途换 IP 时死掉。sessid 把你钉在一个出口直到过期。

两扇门,一个内核

智能体向 /api/v1/fetch POST JSON。浏览器和 curl 在 :7777 讲 CONNECT。两边都调用 selectRoute。

用语

控制台用的十来个词。

IP / 出口
网站看到的地址。不是你的笔记本,也不是智能体主机 — 而是离开 IP Router 的最后一跳。
cc(国家)
ISO 国家代码。GB 是英国,DE 是德国,JP 是日本。它选定市场。
城市
比国家更细。伦敦对曼彻斯特,纽约对奥斯汀。用户名里空格变成下划线:city-new_york。
lang(语言)
Accept-Language 头。站点在问「你读什么语言?」。与 IP 无关。
sessid(粘滞)
你反复使用的名字,让一份工作的每一跳都走同一出口。默认 TTL 是 10 分钟;sesstime 可以覆盖它。
类型
出口属于哪类网络:住宅、机房、移动,或 ISP。站点对它们区别对待。
节点池
你添加的节点列表,每个标了国家,也许还有城市。路由器按定向匹配到一个节点。
回连
一个供应商网关。IP Router 把 -cc-US-city-austin-sessid-job1 接到该供应商的 username 后面。
直连
本机。用来学习没问题。网站仍看到你的主机 IP,所以 geo 页面不会变。
IP farm
你在一座城市里架起的 Android 手机。智能体从那段最后一公里出去,按实时连接计费 — 不按 GB。
Fetch API
用 JSON 发 POST /api/v1/fetch。给不会讲 HTTP CONNECT 的智能体和 LLM。
网关 :7777
一个 HTTP 代理。curl -x、Playwright、浏览器。定向写在 username 里,Oxylabs 风格。
两扇门

同样的定向。不同的客户端。

选一扇和客户端说话方式匹配的门。定向两边都一样。

Fetch API — 智能体之门

客户端发 JSON 时用这扇:LLM 工具、脚本、n8n 节点、Playground。

用 Bearer 密钥 POST /api/v1/fetch。把国家、城市、语言、会话放进 body。响应里有页面、出口 geo,以及 route.reason,你能看出为什么选了这一跳。

它抓取一个 URL 并返回 body。它不会点击、填表,也不保留真正的浏览器 cookie。要在真浏览器里结账,用网关。

HTTP 网关 — 浏览器之门

客户端已经会讲 HTTP 代理时用这扇:curl -x、Playwright、Chrome、期望 CONNECT 的爬虫。

把代理指到 host:7777。用户名是 iprouter-{keyId}-cc-GB-city-london-sessid-job1。密码是 API 密钥。定向标记和 fetch body 相同,只是写在 username 里。

CONNECT 改不了 HTTPS 头。若要在 TLS 站点上带 Accept-Language,必须由浏览器(或 Fetch API)发送。username 里的 lang- 只是路由和 HTTP 的提示,不是神奇的 HTTPS 注入。

如果你是用
JSON 智能体 / LLM 工具Fetch API
Playground / 试一个 URLFetch API
curl、Playwright、真浏览器网关 :7777
先登录,再爬同一会话任一门,再加一个 sessid
出口

请求真正从哪里出去。

出口是网站眼里请求离开互联网的地方。至少要有一个不是「本机」的出口,geo 页面才会变。

Direct — 本机

随节点自带。请求立刻成功,Playground 才能用。route.reason 会显示 “direct” 或 “direct fallback (no geo node)”。网站仍看到你的主机 IP。

Pool — 你添加的 IP

控制台 → 代理 pool。每个节点有国家、可选城市和 type。要伦敦,伦敦的 pool 节点赢。只要 GB、不指定城市,任意 GB 节点赢。

Backconnect — 一个供应商网关

你加一个网关。IP Router 把定向注入 username(-cc-DE-city-berlin-sessid-s1)。向供应商买带宽、而不是逐条列出 IP 时用这个。

IP farm — 一座城市里的手机

架起 Android 手机,给站点标上国家和城市,设定多少连接在线。智能体从那段最后一公里出去。按连接按月计费。14 天试用覆盖第一部手机。

你点名国家时,路由器按这个顺序试:city pool match → country pool match → backconnect geo injection → direct fallback。一个启用的代理都没有是 422,不是悄悄失手。

第一次试

五分钟。你还不需要付费出口。

做一次,后面的指南就不再抽象。五分钟。你还不需要付费出口。

  1. 01

    Landing → 打开控制台。本地没有注册。你会落到总览。

  2. 02

    Playground 预填了本地 echo。选一个国家(US 就可以)。会话留着 agent-demo。发送。echo 总会回 200 — 这证明门通了,不是 geo。

  3. 03
    读三个字段

    ok 应为 true。route.reason 告诉你选了哪个出口。geo.exit 是外界会看到的 IP — direct 时为空,或就是你的机器。

  4. 04

    在代理 pool 下加一个 pool 或 backconnect 节点,或在你关心的城市加一个 IP farm。再发一次。reason 不应再说 “direct fallback”。

  5. 05

    API 密钥给 Fetch API。Endpoints 拼出网关 username。智能体页有 LLM 工具 schema。同一套定向,三层皮。

用例

每种工作怎么跑。

每次旋钮都一样:国家、城市、语言、sticky、type。任务变的只是拧哪些、走哪扇门。选一行。

城市 / 国家

按那个城市里的人看搜索

Google(还有 Bing、maps)不是同一张网。它们按你站的位置展示。排名、local pack、广告,甚至拼写猜测 — 都看出口 IP 和语言头。智能体从美国机房 fetch,你评的就是美国结果页,哪怕问题是「曼彻斯特看起来怎样」。

没有 IP Router

你拿到的是主机所在国的 SERP。从弗吉尼亚虚拟机查伦敦,仍是弗吉尼亚页面,查询串只是长得像伦敦。

有它

cc-GB + city-london + lang-en_GB。这一跳从英国出口出去,Accept-Language 是英式英语,页面就是伦敦访客会看到的那一版。

原理

  1. 01点名市场:国家 GB,城市 London,语言 en-GB。城市很重要 — Manchester 和 London 的 local pack 不同。
  2. 02要 HTML/JSON 给智能体读,用 Fetch API。无头浏览器开 SERP,用 gateway。
  3. 03分页或点进结果时用稳定 sessid。中途新会话像新访客。
  4. 04读 route.reason。你要 city pool match(或 backconnect geo injection)。Direct fallback 说明还在主机上。
  5. 05比两次:同一查询,US 对 GB。local pack 和广告应该挪位置。若没动,你还没走在 geo 出口上。
门

任一门。智能体发 JSON 用 Fetch;客户端讲 CONNECT 用 gateway。

cc-GBcity-londonlang-en_GB
Fetch API
{
  "url": "https://www.google.com/search?q=best+coffee+near+me",
  "geo": { "country": "GB", "city": "London", "language": "en-GB" },
  "session": "serp-london"
}
网关 :7777
curl -x http://iprouter-key_dev-cc-GB-city-london-lang-en_GB-sessid-serp-london:ipr_live_dev_key@127.0.0.1:7777 https://www.google.com/search?q=best+coffee+near+me
这样就算成功

route.reason 是一次 geo 命中,geo.exit 不是你的主机,local pack 点名的是伦敦商家 — 不是服务器旁边那些。

常见错误

  • 只设国家。GB 不带城市,常常落到全国页,缺你在意的 local pack。
  • 没有 lang。英国 IP 配 en-US,仍会偏向美式拼写,结果里混进 US 站点。
route.reason

这句话告诉你 geo 是否真的发生了。

city pool match
你要了一个城市,且该城市有启用的 pool 节点。最好的 geo 命中。
country pool match
没有城市节点(或你没要城市),但该国有启用的 pool 节点。
backconnect geo injection
该国没有 pool 节点。backconnect 网关开着,所以定向被写进了它的 username。
direct fallback (no geo node)
该国什么都没有。请求仍出去了 — 经本机。geo 页面不会变。加一个节点,或一个 farm。
sticky session
你复用了 sessid,旧出口仍启用。IP 和上次相同。TTL 已刷新。
backconnect rotate / pool rotate / direct
你没有点名国家。路由器挑了任意匹配的出口;若你带了会话,会对这次选择做 hash,让它保持不动。
常见错

那些看起来像产品缺陷的情况。

有国家,没语言

日本 IP 配英文 Accept-Language,往往仍出英文。lang(或 fetch body 里的 language)要和 cc 一起设。

每次请求都换新 sessid

会话字符串一变,你就是另一个人。登录会掉。整份工作复用同一个 sessid。

轻信 direct fallback

本机上 echo 回 200 不能证明 geo。读 route.reason。若它写的是 direct fallback,网站看到的仍是你的主机。

机房与住宅

有些源站会指纹识别 ASN。页面若是验证码墙,或一张「检测到机房」的空白页,设 type-residential,或用 IP farm。

HTTPS + 网关 + lang

网关不能把 Accept-Language 注入 HTTPS 的 CONNECT 隧道。由客户端发送这个头,或改用 Fetch API。

空 pool

若每个节点都禁用了,你会得到 422 “No enabled proxies in the pool.”。启用 direct 节点,或加一个开着的。