Cловом «прокси» в контексте ИИ-агентов могут называть три совершенно разные вещи:
Обвязка агента (например, фреймворк browser-use) связывается с языковой моделью — будь то Claude, GPT или Hermes — напрямую, минуя прокси-сервер.
Прокси подключается ровно в тот момент, когда агент отправляется во внешний интернет. Для этого он использует два основных инструмента:
На выходе целевые сайты видят лишь IP-адрес из нужной локации, а ваш реальный сервер (и реальный IP) с ИИ-агентом остается полностью за кадром.
Стабильные резидентные IP с выбором геолокации для AI-агентов, мультигео-исследований и доступа к сайтам с меньшим числом антибот-блокировок.
Настроить прокси для обычного чата (в нашем случае это Claude) невозможно. Дело в том, где выполняется работа.
Claude Code запускается на вашей машине: он читает переменные окружения, видит ваши файлы и открывает сетевые соединения из вашей системы, поэтому заданный до старта HTTPS_PROXY он подхватывает и уходит в интернет через ваш прокси.
Обычный чат работает на инфраструктуре Anthropic: когда он выполняет поиск или открывает страницу, соединение устанавливается с их серверов, а не с вашего компьютера — там нет вашего окружения, нет ваших переменных и нет вашего прокси-эндпоинта, и передать их туда нечем, такого параметра в API просто не существует.
Системный прокси или Proxifier на вашей машине здесь тоже не помогут: они изменят адрес, с которого вы подключаетесь к сервису, но не адрес, с которого сервис выходит на целевые сайты.
Для Claude in Chrome можно просто поставить прокси в барузере и все. И у нас как раз уже есть статья по настройке прокси в Chrome.
Итак, вот цель этого гайда: когда Claude Code открывает страницу сайта (не свой канал до Anthropic, а именно целевой сайт), он выходит в интернет через резидентный прокси Froxy с нужной страной.
Работает все через отдельный Python-скрипт (check_page.py), который вы один раз настроите, а дальше можно просто просить Claude Code в чате: «посмотри страницу [URL] из Бельгии, США и Германии» — он сам все прогоняет и присылает результат.
Скрипт сам по себе ничего не знает про Claude Code, это обычный Python (Playwright + python-dotenv). Поэтому он запустится с любым агентом, где можно исполнить Python-код.
Перед исполнением лучше проверить есть ли постоянное файловое хранилище или механизм секретов, разрешен ли исходящий сетевой трафик через произвольный прокси и можно ли утанавливать зависимости.
В Terminal введите комманду:
python3 --version
Если версия не показалась (ошибка «command not found») — поставьте Python с python.org (обычное скачивание и установка), потом повторите команду выше.
mkdir -p ~/proxy-qa && cd ~/proxy-qa
python3 -m venv venv
source venv/bin/activate
pip install playwright python-dotenv
playwright install chromium
Последняя команда скачает браузер, которым скрипт будет открывать страницы. Это может занять пару минут.
В Terminal, из папки ~/proxy-qa создаем файл:
touch .env
open -e .env
Откроется пустой TextEdit. Заполните, подставив свои реальные значения из кабинета Froxy:
FROXY_HOST=gate.froxy.com
FROXY_PORT=9000
FROXY_USER=твой_логин
FROXY_PASS_BASE=твой_пароль
Важно про FROXY_PASS_BASE: у Froxy страна и другие параметры сессии передаются не в username, а прямо в пароле, через ;, в формате:
пароль;country;;;
Поэтому FROXY_PASS_BASE — это только «голая» часть пароля, без ;country;;; на конце — остальное скрипт дописывает сам. Например, если в личном аккаунте пароль bpsu;;;; — то в FROXY_PASS_BASE вставляйте только bpsu.
Сохраните (⌘S / Ctrl+S) и закройте. Этот файл остается только на вашем компьютере — Claude его не видит и не должен видеть.
В той же папке ~/proxy-qa создаем файл check_page.py:
touch check_page.py
open -e check_page.py
Откроется пустой файл. Вставьте туда весь этот скрипт:
import os
import sys
from datetime import datetime
from dotenv import load_dotenv
from playwright.sync_api import sync_playwright
load_dotenv()
HOST = os.environ["FROXY_HOST"]
PORT = os.environ["FROXY_PORT"]
USER = os.environ["FROXY_USER"]
PASS_BASE = os.environ["FROXY_PASS_BASE"]
REALISTIC_UA = (
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
)
def build_password(country=None):
"""Формат подтвержден экспериментально: password;country;;;"""
country_part = country.lower() if country else ""
return f"{PASS_BASE};{country_part};;;"
def fetch_one(p, url, country):
password = build_password(country)
proxy = {
"server": f"http://{HOST}:{PORT}",
"username": USER,
"password": password,
}
browser = p.chromium.launch(proxy=proxy, headless=True)
try:
context = browser.new_context(
user_agent=REALISTIC_UA,
viewport={"width": 1366, "height": 850},
)
page = context.new_page()
# 1. Проверяем реальную identity прокси перед основным запросом
page.goto("https://ifconfig.co/json", timeout=30000)
identity = page.inner_text("body")
# 2. Идем на целевую страницу
page.goto(url, timeout=30000)
try:
page.wait_for_load_state("networkidle", timeout=10000)
except Exception:
print(f"[{country}] networkidle не наступил за 10 сек — это ок, продолжаем.")
page.wait_for_timeout(1000) # небольшая пауза, чтобы контент успел дорисоваться
text = page.inner_text("body")
return identity, text
finally:
browser.close()
def run(url, countries):
safe_name = url.replace("https://", "").replace("http://", "").replace("/", "_")
saved_files = []
with sync_playwright() as p:
for country in countries:
print(f"\n===== {country.upper()} =====")
identity, text = fetch_one(p, url, country)
print("Proxy identity:")
print(identity)
timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
text_path = f"page_text_{safe_name}_{country}_{timestamp}.txt"
with open(text_path, "w", encoding="utf-8") as f:
f.write(text)
print(f"Сохранен текст: {text_path}")
saved_files.append(text_path)
return saved_files
if __name__ == "__main__":
if len(sys.argv) < 3:
print("Использование: python check_page.py <URL> <country1,country2,...>")
print("Пример: python check_page.py https://example.com be,us,de")
sys.exit(1)
target_url = sys.argv[1]
country_list = [c.strip() for c in sys.argv[2].split(",") if c.strip()]
run(target_url, country_list)
Сохраните и закройте.
Из той же папки (venv должен быть активирован — если закрывали Terminal, сначала source venv/bin/activate) прогоните команду:
python check_page.py https://ishosting.com be,us,de
Что должно произойти: в консоли блок Proxy identity на каждую страну (реальный IP/гео, по которому видно, что подключение действительно из нужной страны).
Попросите Claude Code в чате: «посмотри [URL] из Бельгии, США и Германии» — он запустит команду сам и разберет результат. Должно получится по одному .txt файлу с текстом страницы на каждую страну (page_text_<сайт>_<страна>_<время>.txt) — из них Claude достает конкретные данные (цены, тексты и т.п.) прямо в чат.
Направляйте трафик AI-агентов через реальные мобильные сети, ротируйте IP и тестируйте страницы в разных странах.
В кабинете Froxy есть настройка forced rotation — обязательная смена IP раз в 90–3600 секунд (дефолт 3600). Это глобальная настройка конкретного типа прокси. Если нужно другое значение — меняете один раз в дашборде Froxy и все.
Если что-то не работает, проверьте голое подключение к прокси, в обход Playwright:
export $(grep -v '^#' .env | xargs)
curl -v -x "http://${FROXY_USER}:${FROXY_PASS_BASE}@${FROXY_HOST}:${FROXY_PORT}" https://ifconfig.co/json
Вывод ERR_TUNNEL_CONNECTION_FAILED / 407 означает неверный логин/пароль/host/port, опечатка в .env, либо у провайдера включена привязка по IP вместо логин/пароля.
Наш скрипт заточен именно под Froxy, поэтому если голый запрос проходит, а с ;country;;; в пароле нет, значит формат гео-параметра у вашего провайдера другой. Экспериментируйте: меняйте местами слоты, смотрите на country_iso в ответе ifconfig.co/json, пока не зафиксируете рабочий формат — и подставьте его в build_password().
Timeout ... networkidle — нормально для страниц с чатами/аналитикой, которые никогда полностью не «затихают» по сети; в скрипте уже стоит try/except с таймаутом 10 сек на этот случай.
Мы запустили агента по гайду и прогнали его через четыре сценария, чтобы проверить, что именно прокси меняет, что остается без изменений и где заканчиваются возможности нашего скрипта.
Это не лабораторный тест, а воспроизводимое испытание на рандомных сайтах.
Что проверяли: нужен ли прокси вообще.
|
Критерий |
Свой IP |
Froxy |
|
Успешно выполнено |
31 из 50 |
50 из 50 |
|
Ошибок HTTP 429 |
19 |
0 |
|
Время на запрос |
0,11 с |
0,67 с |
Свой IP к моменту запуска был уже «прогрет» предыдущими тестами в той же сессии. Качественный вывод от этого не меняется, но конкретную цифру 19 нельзя считать замером с чистого листа — на холодном своем IP отказов было бы меньше.
Вывод: без прокси агент упирается в rate-limit примерно на середине серии однотипных задач. Прокси добавляет полсекунды на запрос — это плата за то, что серия доходит до конца. Если у агента одна задача складывается из десятков обращений, то пусть лучше она будет чуть медленнее, чем вообще не выполнена.
Что проверяли: влияет ли страна exit IP на данные, которые агент возвращает.
Мы прогнали страницу с тарифами определенного сайта через три гео за один вызов. Цены совпали полностью — от $4,00 в месяц за младший тариф и далее по всей сетке. Различий между США, Германией и Бразилией нет.
Выводы:
Во-первых, механизм «один промпт → N стран → готовые данные» отработал end-to-end: агент действительно вышел из трех разных стран и вернул сопоставимые структурированные данные.
Во-вторых, выяснилось, что этот сайт держит единый прайс независимо от региона, а это уже само по себе факт для сравнения с конкурентами.
Итого, один прогон через три страны отвечает на вопрос примерно за минуту.
Что проверяли: держится ли один exit IP на протяжении задачи.
Провели пять запросов подряд с интервалом в секунду и все ушли с одного и того же адреса — 77.86.23.23 во всех пяти случаях. IP в пределах текущего окна ротации стабилен.
Это не сравнение режимов. Ротация у Froxy задается при генерации порта в личном кабинете, а не параметром в запросе.
Наш вывод в том, что для агентных задач это даже удобнее. Режим фиксируется на уровне порта, поэтому «личность» агента задается выбором порта из заранее сгенерированного листа. Управление получается декларативным: агент не жонглирует ротацией на ходу, он просто работает с тем портом, который ему выдали на задачу.
Что проверяли: сколько ресурсов экономит отказ от загрузки картинок, видео и шрифтов.
Скрипт отработал корректно — 7 запросов заблокированы. Экономия по времени оказалась небольшой: 0,6 секунды из 13. Полнота извлеченных данных не пострадала ни в одном из вариантов.
Хотя мы замеряли время, основной эффект здесь скорее в объеме трафика (резидентные прокси тарифицируются по гигабайтам). На выбранной странице тяжелого медиа почти нет, поэтому и экономия вышла скромной. Но на каталогах и маркетплейсах картинки составляют основную часть веса страницы.
Вывод: блокировать медиа стоит по умолчанию — на качество извлечения это не влияет, а на счет за трафик влияет тем сильнее, чем тяжелее целевой сайт.
Сделать так можно, но на больших объемах вы точно превысите все лимиты по трафику. Каждый шаг агента — это отдельный платный запрос к языковой модели, поэтому классический скрапинг
Агент хорошо показывает себя на разнородных сайтах, при постоянно меняющейся верстке и в запутанных сценариях, так как способен быстро разобрать измененную структуру. Правда, платить придется скоростью и рисками: агент может выдавать очень убедительный, но совершенно неверный результат.
Самая разумная опция здесь — гибрид: агент один раз разбирает сложный сайт и создает гибкую схему извлечения, по которой дальше молотит дешевый скрапер. А сам агент подключается снова только тогда, когда верстка на сайте изменилась.
Да, API управляет инфраструктурой — созданием и обновлением портов, настройкой гео-фильтров, контролем подписки и баланса.
Сам трафик агента идет напрямую через прокси-эндпоинт в обход API. Это удобно, когда у вас работает много агентов и каждому нужно на лету выделять отдельные порты под конкретные гео-локации или отслеживать расход трафика под задачу.
Выбор зависит от целевого сайта, а не от архитектуры агента:
Главное специфическое требование для агентов — поддержка длительных сессий. Задача агента обычно занимает несколько минут, и смена IP в процессе может все сломать.
И еще один практический момент: Claude Code не поддерживает SOCKS, поэтому выбирайте HTTP-прокси, если работаете с ним.
В среднем выходит от нескольких единиц до десятков мегабайт на одну задачу. Браузерный агент работает как обычный пользователь — загружает страницу целиком, со всеми скриптами, картинками и шрифтами, причем делает это на каждом шаге.
Чтобы существенно снизить расход трафика, можно заблокировать загрузку медиафайлов и тяжелых элементов: на извлечение текста это обычно не влияет.
Нет. Когда модель использует встроенный веб-поиск, запрос уходит непосредственно с серверов OpenAI или Anthropic.
Системные прокси или утилиты вроде Proxifier меняют только ваш IP при обращении к самому сервису.
Если вы работаете в Chrome, то можете подключить прокси в браузере, тогда через расширение Claude in Chrome выход агента во внешний интернет будет проходить через прокси.