← Все статьи

Proxy Port: таргетинг и сессии в имени пользователя

Proxy-порт FourA считывает сеть, страну и sticky-сессии из имени пользователя, а при опечатке возвращает 400 со списком допустимых ключей. Полное описание грамматики.

Что нового

Достаточно пропустить одну букву. Напишите -contry-de в имени пользователя proxy, и опечатка останется незамеченной, выглядя в точности как рабочий параметр.

Порт proxy FourA отвечает на такое ошибкой 400 со списком всех известных ему ключей. Это лишь небольшая деталь продукта, который вышел из бета-версии 15 сентября: URL proxy на наших выходных узлах для любого клиента с его поддержкой (браузер, утилита загрузки, ваш текущий скрапер) без необходимости писать вызовы к API. Вы создаете proxy-пользователя в Dashboard, вставляете строку, после чего туннели и трафик учитываются в вашем тарифе так же, как и обычные запросы к API.

Ниже описана вся грамматика и логика каждого правила.

Как это работает

Порт доступен по адресу proxy.foura.ai:34004 и поддерживает HTTP CONNECT с Basic-аутентификацией для целевых портов 443 и 80. Учетные данные принадлежат proxy-пользователям, они намеренно отделены от вашего ключа API: рукопожатие proxy передается в открытом виде, а proxy-пользователь может получить новый пароль без необходимости менять что-либо в интеграции с API.

Все, что идет после учетных данных, представляет собой список пар -key-value в произвольном порядке:

# Shared network, a German address, one sticky session for this job
curl -x "http://USERNAME-country-de-session-job42:PASSWORD@proxy.foura.ai:34004" \
  https://example.com

# Premium network, an Android address in Germany, held 30 minutes
curl -x "http://USERNAME-network-premium-country-de-os-android-session-s1-lifetime-30:PASSWORD@proxy.foura.ai:34004" \
  https://example.com

Shared представляет собой собственные выходные узлы FourA: это вариант по умолчанию, включенный в ваш тариф. Premium включает домашние адреса, расходуемые из объема премиум-трафика по вашему плану плюс любые докупленные объемы. В сети shared опция -fallback-premium позволяет переключить соединение на узел premium, если узел shared не справляется с нагрузкой. По умолчанию она отключена и срабатывает только при наличии остатка премиум-лимита. Включение ее по умолчанию означало бы автоматическое списание этого лимита без вашего явного согласия.

Параметр страны можно указывать несколько раз, поэтому -country-de-country-fr задает охват из двух стран. Регион, город, сеть по номеру AS, тип устройства (windows, android, ios, mac) и lifetime (от 3 до 1440 минут) доступны только на тарифах premium. Запрос города в сети shared вернет ошибку 400 вместо попытки подобрать наиболее подходящий узел. В сети shared таргетинг ограничен уровнем страны, поскольку фильтр по городам, который чаще всего невозможно применить, хуже полного отсутствия фильтрации.

Параметр -session-<name> (от 1 до 32 букв, цифр или символов подчеркивания) делает соединения липкими: все соединения с этим именем используют один и тот же адрес. В сети shared адрес удерживается по скользящему десятиминутному окну, то есть пока вы продолжаете его использовать. В сети premium адрес удерживается в течение заданного вами lifetime или по умолчанию для сети. Если сессия не указана, каждое соединение идет с нового адреса.

Также предусмотрены сохраненные значения по умолчанию. Настройки таргетинга, сохраненные для пользователя прокси в Dashboard, применяются ко всем его соединениям, что позволяет сократить строку подключения до базовых учетных данных. При этом имя пользователя сохраняет приоритет для конкретного соединения, а any сбрасывает сохраненное значение: например, -city-any запрашивает ключ, где сохранен Мюнхен для всей Германии. Клиенты с поддержкой заголовков в запросах CONNECT (в cURL это делается через --proxy-header) могут передавать те же параметры через заголовки X-Foura-Country, X-Foura-Session и другие, при этом заголовок имеет приоритет над именем пользователя.

Практическая польза

Большая часть этих изменений снимает вопросы, которые раньше приходилось задавать.

Почему соединение отклонено? Любой отказ после проверки учетных данных содержит заголовок X-Foura-Error с однострочным описанием причины. Ошибка 400 сообщает имя параметра и список допустимых значений. Ошибка 429 указывает, какой именно лимит тарифа был исчерпан: число одновременно открытых туннелей, частота открытия туннелей в минуту или объем стандартного трафика за расчетный период.

К чему привязаны лимиты? К аккаунту. Туннели и их открытия учитываются на уровне аккаунта, а не конкретного пользователя прокси, поэтому создание дополнительных учетных данных не увеличивает лимиты. Трафик расходует общую пропускную способность тарифа, а премиум-трафик списывается из премиум-квоты внутри этого общего объема, не суммируясь сверх него. В планах с оплатой по кредитам порт имеет свой предоплаченный объем гигабайтов, баланс которого пополняется на странице Billing. Если туннель не был открыт, списания не происходит.

Кому принадлежат учетные данные? Теперь владельцем может быть организация, благодаря чему скрипты выгрузки данных компании не перестанут работать при увольнении одного сотрудника. Участники организации могут использовать профиль и просматривать пароль; администраторы и владельцы могут ротировать ключи, отключать профиль или изменять параметры таргетинга; передать профиль наружу может только владелец.

Что изменилось? Переключите селектор Product в Overview, Metrics или Activity на Proxy: туннели распределены по тем же классам результатов, что и ваши API requests, видно число открытых прямо сейчас, время установки и трафик, с разбивкой по proxy user, цели, стране выхода или client IP. Сессия, у которой уже есть адрес, обычно подключается быстрее чем за секунду.

Но порт работает как труба, и это компромисс. Клиент взаимодействует с сайтом через туннель, поэтому профили браузера, ваши validate rules и обработка интерактивных страниц не участвуют в этом пути. Кроме того, учитываются байты: страница с отказом, полученная через открытый туннель, тарифицируется как обычный трафик, тогда как в API неуспешный request не оплачивается. Передавайте сырой трафик через порт; отправляйте защищенные страницы в API.

Для опытных пользователей

Когда лимит premium исчерпан, три маршрута в эту сеть намеренно возвращают три разных ответа. Подключение с указанием -network-premium отклоняется с ошибкой 403 с четким объяснением: если бы клиент незаметно обслуживался из другого источника, он продолжал бы слать запросы, а затем искал бы в счете строку premium, которой там нет. Фолбэк просто не срабатывает, а сохраненная настройка premium по умолчанию для proxy user переключается на общую сеть, поэтому туннель все равно открывается. Ни один из этих вариантов не требовал списания средств за подключение.

Три комбинации отклоняются сразу, без частичного выполнения: точечный таргетинг в общей сети, -fallback-premium вместе с -network-premium, а также точечный таргетинг при активном фолбэке. Порт поддерживает только метод CONNECT, поэтому клиент, отправляющий обычный http:// request вместо туннелирования, получает 405 (curl туннелирует его через --proxytunnel). Браузер, работающий через этот порт, всегда должен передавать имя сессии, так как загрузка одной страницы открывает десятки соединений.

Несколько воркеров, каждый на собственном адресе? Назначьте каждому собственное имя сессии:

import requests

TEMPLATE = "http://USERNAME-country-de-session-{name}:PASSWORD@proxy.foura.ai:34004"

def worker_session(name):
    proxy = TEMPLATE.format(name=name)
    s = requests.Session()
    s.proxies = {"http": proxy, "https": proxy}
    return s

workers = [worker_session(f"w{i}") for i in range(4)]
print(workers[0].get("https://example.com").status_code)

В Dashboard все работает точно так же в масштабе: включите Sticky, укажите количество, и на вкладке Connection string появится список адресов построчно, в виде URL или host:port:user:pass для proxy менеджеров. Непонятна причина отказа? Добавьте -sv к вызову curl и передайте вывод в 2>&1 | grep -i x-foura-error. Все параметры описаны в справочнике портов proxy, а интерфейс Dashboard разобран в разделе Proxy Users.

Что дальше

Первый клиент, который мы построили на proxy users, это наш собственный продукт. Расширение FourA Chrome extension направляет трафик браузера через одного из них: выберите сеть и страну, переключите тумблер, и в строке статуса появится адрес, который видят сайты. Это бета-версия, ее нет в Chrome Web Store, установка выполняется через раздел Tools в Dashboard в режиме разработчика. В планах также биллинг организаций из публичного roadmap, что важно здесь, поскольку proxy user организации сейчас списывает средства с владельца этой организации.

Proxy URL остается самым старым контрактом интеграции, и каждый ваш инструмент уже поддерживает его. Главная сложность никогда не заключалась в самом туннеле. Важно то, какое значение может нести строка перед ним, и что происходит при ошибке в ней.