Когда ваш scraper внезапно получает 403 на пятой странице пагинации, хотя первые четыре загрузились нормально — скорее всего, проблема в смене IP. Липкие и ротационные прокси-сессии — это два фундаментальных режима работы с прокси-инфраструктурой, и выбор между ними напрямую влияет на success rate, стоимость и архитектуру вашего сбора данных. В этом руководстве мы разберём, как управлять обоими режимами через ProxyHat, когда использовать каждый из них и как избежать типичных ошибок.
Липкие и ротационные прокси-сессии: ключевое отличие
Суть различия укладывается в одно предложение: ротационный шлюз назначает новый exit-IP на каждый запрос, а липкая сессия закрепляет один residential IP на фиксированный TTL (обычно от 1 до 30 минут). Всё остальное — архитектурные следствия этого базового факта.
| Параметр | Ротационная сессия | Липкая сессия |
|---|---|---|
| Exit-IP | Меняется на каждый запрос | Один IP на TTL (1–30 мин) |
| Идентификация сессии | По умолчанию, без токена | Через токен в username |
| Подходит для | Массовый сбор публичных данных | Логины, корзины, многошаговые потоки |
| Риск блокировки | Низкий (разные IP) | Средний (один IP, но residential) |
| Управление состоянием | Невозможно | Возможно в рамках TTL |
Технический контекст: почему проблема существует
Многие веб-приложения привязывают состояние сессии к IP-адресу клиента. Это не прихоть — это защита от session hijacking и CSRF-атак, рекомендованная в OWASP Session Hijacking Prevention Cheat Sheet. Когда прокси-шлюз меняет IP между запросами, сервер видит «другого» клиента и инвалидирует сессию.
Конкретные сценарии, где это критично:
- Аутентификация — login-токен, привязанный к IP, становится недействительным при ротации.
- CSRF-токены — сервер сверяет originating IP с тем, что выдал токен.
- Корзины e-commerce — состояние корзины часто хранится в server-side session, привязанной к IP.
- Пагинация с курсорами — некоторые API валидируют cursor-токены против IP, чтобы предотвратить передачу ссылки другому пользователю.
- Антибот-системы — Cloudflare, Datadome и PerimeterX накапливают репутацию по IP; смена IP сбрасывает «доверие», накопленное в рамках сессии.
Именно поэтому липкая прокси-сессия — это не просто «удобство», а техническая необходимость для любого потока, который требует непрерывности состояния.
Управление сессией через username
В ProxyHat режим сессии кодируется прямо в username — никаких отдельных API-вызовов не требуется. Это стандартный подход для residential прокси-провайдеров, описанный в RFC 7230 в контексте proxy-аутентификации через Proxy-Authorization.
Ротационный режим (по умолчанию)
Без токена сессии шлюз выдаёт новый IP на каждый запрос:
http://user:pass@gate.proxyhat.com:8080
Каждый HTTP-запрос через этот URL выходит с разных residential IP-адресов.
Липкий режим с гео-привязкой
Добавление токена -session-abc123 закрепляет IP, а -country-US фиксирует страну выхода:
http://user-session-abc123-country-US:pass@gate.proxyhat.com:8080
Все запросы с одинаковым session-токеном будут выходить через один и тот же residential IP в США, пока TTL не истечёт или пока вы не смените токен.
Городское таргетирование + липкая сессия
http://user-country-DE-city-berlin-session-myflow01:pass@gate.proxyhat.com:8080
Закрепляет IP в Берлине для всей длительности потока. Полный список доступных локаций — на странице локаций ProxyHat.
Почему IP-bound state ломается без липкости
Рассмотрим конкретный сценарий: вы мониторите цены на маркетплейсе, который требует логина. Поток выглядит так:
- POST /login → сервер выдаёт session cookie, привязанный к IP
- GET /dashboard → сервер проверяет cookie + IP
- GET /product/12345 → сервер снова проверяет cookie + IP
С ротационным прокси шаг 1 проходит с IP-A, шаг 2 приходит с IP-B, и сервер возвращает 401. С липкой сессией все три шага проходят с одного residential IP, и сервер видит непрерывную сессию.
Аналогично с пагинацией: некоторые SERP-движки выдают cursor-токен, который включает хэш originating IP. При ротации следующий запрос с другим IP получает invalid cursor — и вы падаете на 400 или 403. Для SERP-трекинга липкие сессии часто дают на 30–40% выше success rate при глубокой пагинации (страница 5+), чем ротационные. Подробнее об этом — в нашем кейсе SERP-трекинга.
Практические примеры
Python: ротационный режим (новый IP на запрос)
import requests
from itertools import cycle
PROXY = "http://user:pass@gate.proxyhat.com:8080"
proxies = {"http": PROXY, "https": PROXY}
urls = [
"https://httpbin.org/ip",
"https://httpbin.org/ip",
"https://httpbin.org/ip",
]
for url in urls:
r = requests.get(url, proxies=proxies, timeout=30)
print(r.json()["origin"])
# Каждый запрос выйдет с разного IP
Здесь не указан session-токен, поэтому шлюз ротирует IP автоматически. Это оптимально для массового сбора публичных страниц без состояния.
Node.js: липкая сессия для многошагового потока
const axios = require("axios");
const sessionId = "orderflow-" + Date.now();
const proxyUrl =
`http://user-session-${sessionId}-country-US:pass@gate.proxyhat.com:8080`;
const client = axios.create({
proxy: { host: "gate.proxyhat.com", port: 8080 },
proxyHeaders: {
"Proxy-Authorization":
"Basic " + Buffer.from(
`user-session-${sessionId}-country-US:pass`
).toString("base64")
},
timeout: 30000
});
// Шаг 1: логин
const login = await client.post("https://shop.example.com/login", {
email: "buyer@example.com", password: "secret"
});
// Шаг 2: корзина — тот же IP
await client.post("https://shop.example.com/cart/add", {
sku: "ABC123", qty: 1
}, { headers: { Cookie: login.headers["set-cookie"] } });
// Шаг 3: checkout — тот же IP
const checkout = await client.post(
"https://shop.example.com/checkout",
{},
{ headers: { Cookie: login.headers["set-cookie"] } }
);
console.log(checkout.status);
Один sessionId гарантирует, что все три шага выходят через один residential IP. TTL сессии — до 30 минут, чего достаточно для большинства checkout-потоков.
Операционное руководство
Настройка TTL сессии
TTL липкой сессии в ProxyHat — до 30 минут. Если ваш поток занимает дольше, генерируйте новый session-токен и повторно аутентифицируйтесь. Для быстрых потоков (1–5 шагов за 30 секунд) TTL не вызывает проблем. Для длинных скрейпинг-сессий (30+ минут) планируйте ротацию токена заранее.
Рециклинг при 429/403
Когда сервер возвращает 429 (Too Many Requests) или 403 (Forbidden) на липкой сессии, это означает, что конкретный IP исчерпал свой лимит или был помечен. Стратегия:
- Получили 429 → смените session-токен (новый IP) и повторите запрос.
- Получили 403 → смените токен + страну, подождите 5–10 секунд.
- Получили 3 подряд 403 на разных токенах → приостановите поток на 60 секунд, затем продолжите.
# Псевдокод рециклинга
import time, random, string
def new_session_id():
return ''.join(random.choices(string.ascii_lowercase + string.digits, k=10))
def fetch_with_retry(url, max_retries=5):
for attempt in range(max_retries):
sid = new_session_id()
proxy = f"http://user-session-{sid}-country-US:pass@gate.proxyhat.com:8080"
r = requests.get(url, proxies={"http": proxy, "https": proxy}, timeout=30)
if r.status_code == 200:
return r
elif r.status_code in (429, 403):
time.sleep(2 + attempt * 2)
continue
else:
r.raise_for_status()
raise Exception(f"Failed after {max_retries} retries")
Параллельные сессии
Количество параллельных липких сессий зависит от вашего тарифа и целевого сайта. Практические ориентиры:
- 1 сайт, мягкие лимиты — 10–20 параллельных сессий с разными IP.
- 1 сайт, жёсткие лимиты — 3–5 параллельных сессий, остальные в очереди.
- Несколько сайтов — до 100 параллельных сессий, распределённых по доменам.
Каждая сессия — это отдельный session-токен в username, поэтому управление параллелизмом сводится к генерации уникальных токенов и распределению их по воркерам. Информацию о лимитах тарифов смотрите на странице цен ProxyHat.
Когда ротация побеждает липкость
Липкие сессии — не всегда правильный выбор. Для высокомасштабного сбора публичных данных ротационный режим часто эффективнее:
- SERP-скрейпинг — Google, Bing, Yandex результаты не требуют состояния; ротация распределяет нагрузку по тысячам IP, снижая риск блокировки.
- Публичные каталоги — страницы товаров, новости, справочники без аутентификации.
- AI training data collection — массовая загрузка открытых текстовых корпусов.
- Price monitoring — если сайт не требует логина для просмотра цен.
В этих сценариях ротация даёт до 1500 запросов в секунду при правильной настройке concurrency, тогда как липкие сессии упираются в лимит одного IP. Подробнее о масштабировании — в нашем кейсе веб-скрейпинга.
Правовые оговорки
Независимо от режима прокси, сбор данных должен соответствовать законодательству. Ключевые моменты:
- CFAA (США) — Computer Fraud and Abuse Act может применяться к доступу «без авторизации». Избегайте обхода технических барьеров (CAPTCHA, paywalls). Подробнее — на сайте DOJ.
- GDPR (ЕС) — сбор персональных данных граждан ЕС требует правового основания. Публичные данные, не являющиеся персональными, обычно допустимы, но консультируйтесь с юристом.
- robots.txt — соблюдайте директивы robots.txt целевых сайтов; это снижает юридические риски.
- Условия использования — нарушение ToS сайта может быть основанием для иска, даже если данные публичны.
Практическое правило: если данные открыты без логина, robots.txt не запрещает доступ, и вы не собираете персональные данные — риск минимален. Для всего остального получите юридическую консультацию.
Ключевые выводы
- Ротация — для массового сбора публичных данных без состояния; максимальная пропускная способность, минимальный риск по одному IP.
- Липкая сессия — для потоков с состоянием: логины, корзины, пагинация с курсорами, многошаговые API-вызовы.
- Управление режимом — через токен в username:
-session-abc123для липкости, без токена для ротации. - Рециклинг session-токена при 429/403 — обязательная практика; не пытайтесь «пробить» блок одним IP.
- Параллельные сессии = уникальные токены; количество зависит от лимитов целевого сайта и вашего тарифа.
- Соблюдайте robots.txt, ToS и применимое законодательство (CFAA, GDPR) — техническая возможность не равна праву.
Готовы настроить прокси-инфраструктуру? Изучите тарифы ProxyHat или ознакомьтесь с документацией для продвинутых сценариев настройки.






