Отправьте токен reCAPTCHA с помощью Python HTTPX

Автор: solvethree3 мин на чтение

При отправке POST-запроса целевому сайту используйте solution.token, прокси, через который удалось решить CAPTCHA, и возвращённые параметры браузера. Храните cookies приложения в одном клиенте HTTPX; действительный токен не отменяет требований приложения к сессии или CSRF.

На этой странице

Отправьте готовый токен через успешный прокси

Установите HTTPX с помощью pip install httpx. В примере также используется официальный Python SDK; если он не установлен, см. настройку Python SDK.

В пример включён вызов решения CAPTCHA, чтобы показать, откуда берётся результат. Если у вас уже есть результат SDK со статусом ready, используйте его как result вместе с исходным request. Не создавайте ещё одну задачу только для отправки её токена.

  • Задайте для SOLVETHREE_API_KEY API-ключ рабочего пространства, а для SOLVETHREE_PROXY — URL прокси. Храните API-ключ на сервере.
  • Замените accounts.example.com, действие login и URL отправки значениями вашего целевого сайта. Для имени хоста нужен активный профиль сайта в вашем рабочем пространстве; см. настройку профиля сайта.
  • Адаптируйте поля формы под фактический запрос приложения. Пример отправляет только поле CAPTCHA, а не полную форму входа.
HTTPX · повторное использование прокси и полученных идентификационных данных браузера
# pip install httpx and the official solvethree SDK wheel.
import os
import httpx
from solvethree import Solvethree, successful_proxy

request = {"site": "accounts.example.com", "action": "login", "proxy": os.environ["SOLVETHREE_PROXY"]}
result = Solvethree(os.environ["SOLVETHREE_API_KEY"]).solve(request, timeout=180)
solution = result["solution"]
proxy = successful_proxy(request, result)
if proxy is None:
    raise RuntimeError("No valid successful proxy")
with httpx.Client(proxy=proxy, timeout=30, follow_redirects=False, trust_env=False) as target:
    # Use this client's cookie jar for any required application session first.
    response = target.post("https://accounts.example.com/login",
        data={"g-recaptcha-response": solution["token"]},
        headers={"User-Agent": solution["userAgent"], "sec-ch-ua": solution["secChUa"]})
    print("Application HTTP status:", response.status_code)
    # Check the application's actual response and required CSRF/session fields.

successful_proxy(request, result) выбирает прокси для повторного использования при отправке. Сохраните проверку, которая останавливает отправку, если функция не вернула допустимый прокси. Используйте актуальный параметр HTTPX в единственном числе — proxy=, а не proxies=. Настройка trust_env=False не позволяет настройкам прокси из окружения изменить явно выбранный маршрут.

Используйте cookies, параметры браузера и поля формы вместе

Если приложению нужен предварительный запрос страницы для создания сессии или получения значения CSRF, выполните его в том же клиенте HTTPX до POST-запроса. Его хранилище cookies сохраняет их между запросами. У отдельного клиента эта сессия автоматически не появится.

Для этих предварительных запросов также используйте возвращённые userAgent и secChUa, а не параметры другого браузера. В примере они передаются в POST-запросе как User-Agent и sec-ch-ua. При отправке решения целевому сайту используйте те же заголовки и успешный прокси.

data= отправляет данные формы. Здесь в g-recaptcha-response передаётся solution.token; туда нельзя передавать ID задачи или весь словарь решения. Используйте имя поля из фактического запроса целевого сайта и включайте все необходимые учётные данные, скрытые поля и значение CSRF в ту же отправку.

Проверьте перенаправления, прежде чем считать отправку успешной

follow_redirects=False позволяет увидеть первый ответ приложения. Если это перенаправление, проверьте его статус и адрес назначения, прежде чем явно перейти к ожидаемому следующему шагу приложения с тем же клиентом. Не отправляйте токен повторно на другой URL автоматически.

Выведенный HTTP-статус — лишь отправная точка. Проверьте тело ответа, адрес перенаправления или итоговое состояние приложения, чтобы определить, принял ли целевой сайт запрос. Ответ 200 или перенаправление могут означать как успех, так и сценарий ошибки; статус ready в solvethree означает, что решение создано, а не что целевой сайт его принял.

Запустите первую задачу.

Начните с $5 на балансе рабочего пространства.

Создать рабочее пространство
Отправьте токен reCAPTCHA с помощью Python HTTPX · solvethree