Повторное использование proxy между запросами

Узнайте, как сохранить один и тот же выходной proxy для последующих запросов, чтобы рендеринг JavaScript, вызовы API и постраничная загрузка выполнялись с одного и того же IP-адреса.

Зачем повторно использовать proxy

При первом обращении к цели FourA выбирает для вас рабочий proxy. Каждый ответ включает ID использованного proxy. Передайте этот ID в последующих запросах и:

  • Последующие страницы загружаются через тот же выход, поэтому сессионные cookie и лимиты запросов остаются согласованными для цели.
  • Запрос с привязкой к стране остается в вашем белом списке без необходимости нового выбора.
  • Дешевый endpoint POST /api/single/ повторяет запрос через proxy, который вы уже оплатили при обнаружении, по стоимости Single вместо Proxy.

ID proxy представляет собой непрозрачную строку base36 (например, A1B2C3). Это никогда не сырой IP-адрес.

Где находится ID в ответе

Endpoint Поле Когда присутствует
POST /api/auto/ session.proxy Когда returnSession равно true (по умолчанию)
POST /api/single/ proxy (на верхнем уровне) Только когда в запросе было поле proxy
POST /api/proxy/ proxy (на верхнем уровне) Всегда, при успешном выполнении
POST /api/browser/ proxy (на верхнем уровне) Только когда в запросе было поле proxy

Чтобы получить новый выход без его закрепления, начните с Auto или Proxy. Оба варианта находят рабочий выход и возвращают его ID для вас.

Паттерн 1: Auto находит, Single повторяет

Лучше всего подходит, когда у вас есть неизвестная цель. Auto один раз проходит по лестнице, после чего Single повторно использует успешную сессию для каждой последующей страницы.

import requests

API = "https://eu.api.foura.ai"
H = {"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"}

# Step 1: discover a working exit with Auto.
r = requests.post(f"{API}/api/auto/", headers=H, json={
    "url": "https://example.com/product/42",
    "validate": {"data": {"accept": ["Add to cart"]}}
}).json()

session = r["session"]
proxy = session["proxy"]
user_agent = session["userAgent"]

# Step 2: paginate with Single, reusing the same exit and User-Agent.
for sku in ("43", "44", "45"):
    p = requests.post(f"{API}/api/single/", headers=H, json={
        "method": "GET",
        "url": f"https://example.com/product/{sku}",
        "proxy": proxy,
        "headers": [["User-Agent", user_agent]],
    }).json()
    print(sku, p["status"])

Вызов Auto стоит столько, сколько расходует его ladder. Каждый последующий вызов Single стоит 2 кредита (Single с unblocker, по умолчанию).

Паттерн 2: proxy обнаруживает, браузер рендерит через тот же exit

Используйте это, когда цель должна видеть конкретную страну exit, а для итогового контента требуется JavaScript.

# Step 1: pick a country-scoped exit with Proxy.
curl -X POST https://eu.api.foura.ai/api/proxy/ \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "maxTries": 5,
    "exitCountries": ["FR", "GB"],
    "request": {"method": "GET", "url": "https://example.com/pricing"}
  }'
# Response includes: "proxy": "A1B2C3", "exitCountry": "FR"

# Step 2: render the JS-heavy page through THAT exit.
curl -X POST https://eu.api.foura.ai/api/browser/ \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/pricing",
    "proxy": "A1B2C3",
    "timeout_ms": 20000
  }'

Не вызывайте /api/proxy/ снова для обновления выбора. Новый вызов может выбрать другой exit и лишить смысла его закрепление. Если закрепленный exit перестает работать, выполните новый вызов /api/proxy/ для выбора нового, затем продолжите работу с ним.

Паттерн 3: Пропуск заблокированного exit

Если exit, который раньше работал, начинает возвращать блокировки или CAPTCHA, укажите FourA избегать его при следующем выборе.

{
  "maxTries": 5,
  "ignoreProxies": ["A1B2C3"],
  "request": { "method": "GET", "url": "https://example.com/data" }
}

ignoreProxies принимает список proxy ID из предыдущих ответов. Это работает для /api/proxy/ и /api/auto/. Список учитывается при каждом внутреннем retry, поэтому один вызов с ignoreProxies никогда не выберет сгоревшие exit.

Как долго живет закрепленная сессия

Сам exit живет до тех пор, пока базовый proxy здоров, обычно от нескольких минут до часов. Если replay начинает возвращать проверки, блокировки или неожиданные redirect, exit, вероятно, был заменен или цель обновила свой clearance.

Два варианта действий в этом случае:

  1. Новый вызов /api/auto/ для того же URL. Auto найдет новую рабочую сессию; отбросьте предыдущие ID.
  2. Новый вызов /api/proxy/ с ignoreProxies: ["<burned-id>"], если вы хотите продолжить закрепление вручную.

Cookie сессии из ответа Auto также истекают по расписанию самой цели. Некоторые сайты привязывают clearance на часы, другие на минуты. Относитесь к сессии как к кэшу, а не как к постоянному token.

Частые ошибки

  • Повторное использование proxy ID в разных аккаунтах. Proxy ID являются идентификаторами для конкретного ответа. Передача ID от одного API ключа другому не гарантирует получение того же exit.
  • Попытка декодировать ID. Строка base36 непрозрачна. Не парсите ее, не удаляйте символы, не приводите к нижнему регистру. Передавайте ее обратно без изменений.
  • Закрепление через exit с rate limit. Если цель применяет rate limit по IP, направление множества request через один exit быстрее вызовет блокировку. Для высоконагруженных задач позвольте Auto или Proxy ротировать множество exit и закрепляйте их только там, где цель действительно этого требует.
  • Игнорирование exitCountries при последующем вызове. Если вы закрепили scoped exit, а затем снова вызываете Proxy без exitCountries, последующий вызов может пройти через другую страну. Сохраняйте scope в каждом вызове, которому он нужен.

Связанные материалы

  • API Endpoints: Полный справочник параметров и ответов
  • Smart Fetch (Auto): Как Auto создает сессию, которую вы повторяете
  • Handling Anti-Bot Protection: Когда закрепление помогает, а когда ротация лучше
  • Common Issues: no_eligible_proxy и другие ошибки proxy
Обновлено: 1 августа 2026 г.