Сайт никогда не видит твой ноутбук
Он видит выходной IP. Смени выход — сменится страница: цены, SERP, локатор магазинов, пейвол, всё.
У каждого устройства в интернете есть адрес. Поиск, магазины, реклама и новости по этому адресу решают, что тебе показать: валюту, язык, позиции и даже откроется ли страница. У ИИ-агента в дата-центре адрес один — этот дата-центр. Без локального выхода каждый запрос выглядит так, будто пришёл из одного здания.
Ты называешь страну или город. IP Router выбирает там выход, отправляет запрос через этот IP и возвращает страницу. Один и тот же мозг для JSON-агента и настоящего браузера.
Он видит выходной IP. Смени выход — сменится страница: цены, SERP, локатор магазинов, пейвол, всё.
cc-JP ставит тебя на японский IP. lang-ja говорит сайту, что ты читаешь по-японски. Обычно нужны оба.
Входы, корзины и cookie умирают, если IP сменится посреди сценария. sessid закрепляет тебя за одним выходом, пока не истечёт.
Агенты отправляют JSON методом POST на /api/v1/fetch. Браузеры и curl говорят CONNECT на :7777. Оба вызывают selectRoute.
Выбери дверь под то, как говорит твой клиент. Таргетинг в обоих случаях один.
Используй её, когда клиент шлёт JSON: инструмент LLM, скрипт, узел n8n, песочница.
POST /api/v1/fetch с ключом Bearer. В тело клади country, city, language и session. В ответе — страница, гео выхода и route.reason, чтобы было видно, почему выбран этот переход.
Он забирает URL и возвращает тело. Кликать, заполнять формы и хранить cookie как браузер он не умеет. Для оплаты в настоящем браузере используй шлюз.
Используй его, когда клиент уже говорит на HTTP-прокси: curl -x, Playwright, Chrome, скрейпер, который ждёт CONNECT.
Направь прокси на host:7777. Имя пользователя — iprouter-{keyId}-cc-GB-city-london-sessid-job1. Пароль — API-ключ. Те же токены таргетинга, что в теле fetch, только в имени пользователя.
CONNECT не может переписать заголовки HTTPS. Если на сайте с TLS нужен Accept-Language, его должен послать браузер (или Fetch API). lang- в имени пользователя — подсказка для маршрутизации и для HTTP, а не волшебная подстановка в HTTPS.
| Если ты | Используй |
|---|---|
| JSON-агент / инструмент LLM | Fetch API |
| Песочница / проверить URL | Fetch API |
| curl, Playwright, настоящий браузер | Шлюз :7777 |
| Вход, затем обход той же сессии | Любая дверь, плюс sessid |
Выход — это точка, из которой запрос уходит в интернет, если смотреть глазами сайта. Нужен хотя бы один, который не «эта машина», иначе геостраницы не изменятся.
Стоит на узле с самого начала. Запросы сразу проходят, чтобы песочница работала. route.reason скажет “direct” или “direct fallback (no geo node)”. Сайт всё равно видит IP твоего хоста.
Консоль → Пул прокси. У каждого узла есть страна, необязательный город и тип. Просишь Лондон — побеждает лондонский узел пула. Просишь GB без города — побеждает любой узел GB.
Ты добавляешь один шлюз. IP Router подставляет таргетинг в имя пользователя (-cc-DE-city-berlin-sessid-s1). Так делают, когда полосу покупают у провайдера, а не перечисляют каждый IP.
Размести телефоны Android, пометь площадку страной и городом, задай, сколько подключений живы. Агенты уходят через эту последнюю милю. Счёт — за подключение в месяц. Пробные 14 дней покрывают первый телефон.
Называешь страну — роутер пробует по порядку: city pool match → country pool match → backconnect geo injection → direct fallback. Если включённых прокси нет совсем, это 422, а не тихий промах.
Сделай это один раз, чтобы остальное руководство не было абстракцией. Пять минут. Платный выход тебе пока не нужен.
Лендинг → Открыть консоль. Локально регистрации нет. Ты попадаешь в Обзор.
В песочнице уже подставлен локальный echo. Выбери страну (US подойдёт). Сессию оставь agent-demo. Отправь. От echo всегда придёт 200 — это доказывает дверь, не гео.
ok должно быть true. route.reason говорит, какой выход выбран. geo.exit — IP, который увидел бы внешний мир: пусто или твоя машина, если это direct.
Добавь узел пула или бэкконнекта в Пуле прокси или IP farm в городе, который тебе важен. Отправь снова. reason больше не должен говорить “direct fallback”.
API-ключи — для Fetch API. Эндпоинты собирают имя пользователя шлюза. В Агентах — схема инструмента LLM. Тот же таргетинг, три оболочки.
Каждый раз одни и те же ручки: страна, город, язык, постоянная сессия, тип. Меняется только то, какие из них ты крутишь и в какую дверь заходишь. Выбери строку.
У Google (и у Bing, и у карт) нет одного интернета. Они показывают интернет с того места, где ты стоишь. Позиции, локальный блок, реклама и даже какое написание они считают твоим — всё это зависит от выходного IP и заголовка языка. Если агент запрашивает страницу из американского дата-центра, ты оцениваешь американскую выдачу, даже когда вопрос — «как это выглядит в Manchester».
Ты получаешь SERP страны хоста. Запрос про Лондон с виртуальной машины в Виргинии — всё ещё страница Виргинии со строкой запроса про Лондон.
cc-GB + city-london + lang-en_GB. Переход уходит через британский выход, Accept-Language — британский английский, и страница та, которую увидел бы человек в Лондоне.
Любая дверь. Fetch API, когда агент шлёт JSON; шлюз, когда клиент говорит CONNECT.
{
"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.exit — не твой хост, а локальный блок называет лондонские бизнесы, не те, что рядом с твоим сервером.
Японский IP с английским Accept-Language часто всё равно отдаёт английский. Задай lang (или language в теле fetch) вместе с cc.
Если строка сессии меняется, ты уже другой человек. Входы слетают. Повторяй один и тот же sessid на всю задачу.
200 от echo на этой машине — не доказательство гео. Читай route.reason. Если там direct fallback, сайт всё равно видел твой хост.
Некоторые источники узнают ASN. Если страница — стена с капчей или пустая “datacenter detected”, задай type-residential или используй IP farm.
Шлюз не может подставить Accept-Language в туннель HTTPS CONNECT. Отправь заголовок с клиента или используй Fetch API.
Если все узлы выключены, получишь 422 “No enabled proxies in the pool.” Включи узел direct или добавь тот, который включён.