网站看不到你的笔记本
它看到的是出口 IP。换出口,页面就变 — 价格、SERP、门店定位、付费墙,全变。
网上每台设备都有地址。搜索、商店、广告、新闻用它决定你看到什么 — 货币、语言、排名,甚至页面能不能加载。数据中心里的 AI 智能体只有一个地址:那座机房。没有本地出口,每次 fetch 都像从同一栋楼发出。
你指定国家或城市。IP Router 在那里选一个出口,请求从那张 IP 出去,再把页面交回。JSON 智能体和真浏览器共用同一套脑子。
它看到的是出口 IP。换出口,页面就变 — 价格、SERP、门店定位、付费墙,全变。
cc-JP 把你放到日本 IP。lang-ja 告诉站点你读日语。通常两个都要。
登录、购物车、cookie 会在中途换 IP 时死掉。sessid 把你钉在一个出口直到过期。
智能体向 /api/v1/fetch POST JSON。浏览器和 curl 在 :7777 讲 CONNECT。两边都调用 selectRoute。
选一扇和客户端说话方式匹配的门。定向两边都一样。
客户端发 JSON 时用这扇:LLM 工具、脚本、n8n 节点、Playground。
用 Bearer 密钥 POST /api/v1/fetch。把国家、城市、语言、会话放进 body。响应里有页面、出口 geo,以及 route.reason,你能看出为什么选了这一跳。
它抓取一个 URL 并返回 body。它不会点击、填表,也不保留真正的浏览器 cookie。要在真浏览器里结账,用网关。
客户端已经会讲 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 / 试一个 URL | Fetch API |
| curl、Playwright、真浏览器 | 网关 :7777 |
| 先登录,再爬同一会话 | 任一门,再加一个 sessid |
出口是网站眼里请求离开互联网的地方。至少要有一个不是「本机」的出口,geo 页面才会变。
随节点自带。请求立刻成功,Playground 才能用。route.reason 会显示 “direct” 或 “direct fallback (no geo node)”。网站仍看到你的主机 IP。
控制台 → 代理 pool。每个节点有国家、可选城市和 type。要伦敦,伦敦的 pool 节点赢。只要 GB、不指定城市,任意 GB 节点赢。
你加一个网关。IP Router 把定向注入 username(-cc-DE-city-berlin-sessid-s1)。向供应商买带宽、而不是逐条列出 IP 时用这个。
架起 Android 手机,给站点标上国家和城市,设定多少连接在线。智能体从那段最后一公里出去。按连接按月计费。14 天试用覆盖第一部手机。
你点名国家时,路由器按这个顺序试:city pool match → country pool match → backconnect geo injection → direct fallback。一个启用的代理都没有是 422,不是悄悄失手。
做一次,后面的指南就不再抽象。五分钟。你还不需要付费出口。
Landing → 打开控制台。本地没有注册。你会落到总览。
Playground 预填了本地 echo。选一个国家(US 就可以)。会话留着 agent-demo。发送。echo 总会回 200 — 这证明门通了,不是 geo。
ok 应为 true。route.reason 告诉你选了哪个出口。geo.exit 是外界会看到的 IP — direct 时为空,或就是你的机器。
在代理 pool 下加一个 pool 或 backconnect 节点,或在你关心的城市加一个 IP farm。再发一次。reason 不应再说 “direct fallback”。
API 密钥给 Fetch API。Endpoints 拼出网关 username。智能体页有 LLM 工具 schema。同一套定向,三层皮。
每次旋钮都一样:国家、城市、语言、sticky、type。任务变的只是拧哪些、走哪扇门。选一行。
Google(还有 Bing、maps)不是同一张网。它们按你站的位置展示。排名、local pack、广告,甚至拼写猜测 — 都看出口 IP 和语言头。智能体从美国机房 fetch,你评的就是美国结果页,哪怕问题是「曼彻斯特看起来怎样」。
你拿到的是主机所在国的 SERP。从弗吉尼亚虚拟机查伦敦,仍是弗吉尼亚页面,查询串只是长得像伦敦。
cc-GB + city-london + lang-en_GB。这一跳从英国出口出去,Accept-Language 是英式英语,页面就是伦敦访客会看到的那一版。
任一门。智能体发 JSON 用 Fetch;客户端讲 CONNECT 用 gateway。
{
"url": "https://www.google.com/search?q=best+coffee+near+me",
"geo": { "country": "GB", "city": "London", "language": "en-GB" },
"session": "serp-london"
}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 点名的是伦敦商家 — 不是服务器旁边那些。
日本 IP 配英文 Accept-Language,往往仍出英文。lang(或 fetch body 里的 language)要和 cc 一起设。
会话字符串一变,你就是另一个人。登录会掉。整份工作复用同一个 sessid。
本机上 echo 回 200 不能证明 geo。读 route.reason。若它写的是 direct fallback,网站看到的仍是你的主机。
有些源站会指纹识别 ASN。页面若是验证码墙,或一张「检测到机房」的空白页,设 type-residential,或用 IP farm。
网关不能把 Accept-Language 注入 HTTPS 的 CONNECT 隧道。由客户端发送这个头,或改用 Fetch API。
若每个节点都禁用了,你会得到 422 “No enabled proxies in the pool.”。启用 direct 节点,或加一个开着的。