サイトはノートPCを見ない
見えるのは出口IP。出口を変えればページが変わる — 価格、SERP、店舗検索、ペイウォール。
ネット上の機器には住所がある。検索、店、広告、ニュースはそれで見せるものを決める — 通貨、言語、順位、ページが開くかどうか。データセンターのAIエージェントの住所は、そのデータセンターひとつ。ローカル出口がなければ、どの fetch も同じ建物から出たように見える。
国か都市を指定する。IP Router がそこに出口を選び、そのIPからリクエストを出し、ページを返す。JSONエージェントも本物のブラウザも同じ頭脳。
見えるのは出口IP。出口を変えればページが変わる — 価格、SERP、店舗検索、ペイウォール。
cc-JP は日本のIPに載せる。lang-ja はサイトに日本語を読むと伝える。普通は両方いる。
途中でIPが変わるとログイン、カート、cookie は死ぬ。sessid は期限まで出口に釘付けする。
エージェントは /api/v1/fetch に JSON を POST。ブラウザと curl は :7777 で CONNECT。どちらも selectRoute を呼ぶ。
クライアントの話し方に合う扉を選ぶ。ターゲティングはどちらでも同じ。
クライアントが JSON を POST するときに使う:LLM ツール、スクリプト、n8n ノード、Playground。
Bearer キーで POST /api/v1/fetch。国、都市、言語、セッションを body に入れる。レスポンスにはページ、出口の geo、route.reason が含まれ、その hop が選ばれた理由が分かる。
URL を取得して本文を返す。クリックも、フォーム入力も、本物のブラウザの cookie ジャーも持たない。本物のブラウザで決済するなら、ゲートウェイを使う。
クライアントがすでに HTTP プロキシを話すときに使う:curl -x、Playwright、Chrome、CONNECT を期待するスクレイパー。
プロキシを host:7777 に向ける。ユーザー名は iprouter-{keyId}-cc-GB-city-london-sessid-job1。パスワードは API キー。fetch の body と同じターゲティングトークンが、ユーザー名の中にあるだけ。
CONNECT は HTTPS ヘッダを書き換えられない。TLS サイトで Accept-Language が要るなら、ブラウザ(または Fetch API)が送る。ユーザー名の 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 はユーザー名にターゲティングを注入する(-cc-DE-city-berlin-sessid-s1)。IP をひとつずつ並べる代わりに、プロバイダから帯域を買うときに使う。
Android のスマホを並べ、サイトに国と都市を付け、稼働中の接続数を決める。エージェントはその last-mile から出る。課金は接続あたり月額。14日の試用が最初の1台を覆う。
国を名指しすると、ルーターはこの順で試す:city pool match → country pool match → backconnect geo injection → direct fallback。有効なプロキシがひとつもなければ 422 であり、静かな見逃しではない。
ガイドの残りを抽象のままにしないため、これを一度やる。5分。有料の出口はまだ要らない。
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」と言うべきではない。
Fetch API 用の API キー。Endpoints がゲートウェイのユーザー名を作る。エージェントには LLM ツールの schema がある。同じターゲティング、見た目は3つ。
つまみは毎回同じ:国、都市、言語、sticky、type。仕事で変わるのは、どれを回すかと、どの扉を通るかだけ。行を選ぶ。
Google(と Bing、maps)はひとつのネットを出さない。立っている場所からのネットを出す。順位、local pack、広告、表記まで — 出口IPと言語ヘッダに乗る。エージェントが米国データセンターから fetch すれば、採点するのは米国の結果ページだ。「マンチェスターではどう見えるか」と聞いても同じ。
見えるのはホスト国の SERP。バージニアの VM からロンドンを検索しても、ロンドン型のクエリ文字列が付いたバージニアのページのまま。
cc-GB + city-london + lang-en_GB。hop は英国の出口から出て、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 だと、まだ英語が出ることが多い。cc だけでなく lang(または fetch の body の language)も設定する。
セッション文字列が変わると、別人になる。ログインは落ちる。仕事全体で同じ sessid を再利用する。
このマシンの echo が 200 でも、geo の証明ではない。route.reason を読む。direct fallback とあれば、サイトが見たのはまだホスト。
一部のオリジンは ASN を指紋する。ページが captcha の壁や「datacenter detected」の空白なら、type-residential にするか IP farm を使う。
ゲートウェイは HTTPS の CONNECT トンネルに Accept-Language を注入できない。クライアントからヘッダを送るか、Fetch API を使う。
すべてのノードが無効なら、422「No enabled proxies in the pool.」になる。direct ノードを有効にするか、オンのノードをひとつ足す。