API Tutorials

Методы аутентификации прокси для API CaptchaAI

Нужен ли прокси, чтобы решить CAPTCHA через CaptchaAI? Нет — API решает задачу и без него. Но если цель проверяет IP-адрес токена (Cloudflare Turnstile, Cloudflare Challenge, сессия с привязкой к IP), решение с чужого адреса она не примет. Параметр proxy как раз для этого: CaptchaAI решает с того же IP, с которого загружалась страница. Ниже — все способы аутентификации прокси и формат параметров для каждого.


Когда прокси действительно нужен

Решение зависит не от типа CAPTCHA как такового, а от того, сверяет ли цель IP-адрес токена с IP, с которого загружалась страница:

  • Обычная reCAPTCHA v2 — прокси обычно не нужен, токен работает с любого IP.
  • reCAPTCHA v3 — прокси по желанию: оценка (score) иногда зависит от IP, но жёсткой привязки нет.
  • Cloudflare Turnstile — прокси рекомендуется: токен привязан к IP.
  • Cloudflare Challenge — прокси обязателен: проверка жёстко завязана на IP-адрес.
  • Сессии с привязкой к IP — прокси обязателен: токен сверяется с исходным адресом.

Если сомневаетесь — передавайте прокси. Лишний параметр proxy не мешает решению там, где он не нужен, а вот его отсутствие там, где он обязателен, почти всегда заканчивается отклонённым токеном.


Способы аутентификации прокси

Параметр proxy один и тот же для всех методов — меняется только proxytype и, в третьем случае, формат строки. CaptchaAI поддерживает четыре варианта аутентификации: логин/пароль по HTTP, логин/пароль по SOCKS5, авторизацию по белому списку IP без учётных данных и HTTPS-прокси через CONNECT. Выбор зависит от того, что предоставляет ваш провайдер прокси, а не от типа CAPTCHA, которую вы решаете.

1. Логин и пароль по HTTP

Самый распространённый вариант. Передайте строку host:port:user:pass в параметре proxy и укажите proxytype: HTTP:

import requests
import time

CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"


def solve_with_http_proxy(site_url, sitekey, proxy_host, proxy_port,
                           proxy_user, proxy_pass):
    """Pass HTTP proxy to CaptchaAI for IP-matched solving."""
    proxy_param = f"{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}"

    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": site_url,
        "proxy": proxy_param,
        "proxytype": "HTTP",
        "json": 1,
    })

    data = resp.json()
    if data["status"] != 1:
        raise Exception(f"Submit: {data['request']}")

    task_id = data["request"]

    for _ in range(60):
        time.sleep(5)
        resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": CAPTCHAAI_KEY,
            "action": "get",
            "id": task_id,
            "json": 1,
        })
        data = resp.json()
        if data["request"] == "CAPCHA_NOT_READY":
            continue
        if data["status"] == 1:
            return data["request"]
        raise Exception(f"Solve: {data['request']}")

    raise TimeoutError("Timeout")


# Usage
token = solve_with_http_proxy(
    site_url="https://example.com/form",
    sitekey="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
    proxy_host="proxy.example.com",
    proxy_port=8080,
    proxy_user="myuser",
    proxy_pass="mypass",
)

2. Логин и пароль по SOCKS5

Для SOCKS5 формат строки прокси не меняется — меняется только proxytype:

def solve_with_socks5_proxy(site_url, sitekey, proxy_host, proxy_port,
                             proxy_user, proxy_pass):
    """Pass SOCKS5 proxy to CaptchaAI."""
    proxy_param = f"{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}"

    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": site_url,
        "proxy": proxy_param,
        "proxytype": "SOCKS5",
        "json": 1,
    })

    data = resp.json()
    task_id = data["request"]

    for _ in range(60):
        time.sleep(5)
        resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": CAPTCHAAI_KEY, "action": "get",
            "id": task_id, "json": 1,
        })
        data = resp.json()
        if data["request"] != "CAPCHA_NOT_READY":
            return data["request"]

    raise TimeoutError("Timeout")

3. Белый список IP-адресов (без логина и пароля)

Часть провайдеров прокси авторизует не по логину и паролю, а по белому списку IP-адресов:

def solve_with_whitelisted_proxy(site_url, sitekey, proxy_host, proxy_port):
    """Proxy with IP whitelist — no username/password."""
    proxy_param = f"{proxy_host}:{proxy_port}"

    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": site_url,
        "proxy": proxy_param,
        "proxytype": "HTTP",
        "json": 1,
    })

    data = resp.json()
    task_id = data["request"]

    for _ in range(60):
        time.sleep(5)
        resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": CAPTCHAAI_KEY, "action": "get",
            "id": task_id, "json": 1,
        })
        data = resp.json()
        if data["request"] != "CAPCHA_NOT_READY":
            return data["request"]

    raise TimeoutError("Timeout")

Важно: добавьте в белый список и IP-адреса серверов CaptchaAI — иначе запрос отклонит сам провайдер, а не CaptchaAI, и разбираться придётся не с той стороны.

4. HTTPS-прокси (CONNECT)

Настраивается так же, меняется только proxytype:

def solve_with_https_proxy(site_url, sitekey, proxy_host, proxy_port,
                            proxy_user, proxy_pass):
    proxy_param = f"{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}"

    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": site_url,
        "proxy": proxy_param,
        "proxytype": "HTTPS",
        "json": 1,
    })

    # ... same polling logic ...

Пример на Node.js

Та же логика — отправка, опрос res.php, разбор status:

const axios = require("axios");

const CAPTCHAAI_KEY = "YOUR_API_KEY";
const API = "https://ocr.captchaai.com";

async function solveWithProxy(siteUrl, sitekey, proxyConfig) {
  const params = {
    key: CAPTCHAAI_KEY,
    method: "userrecaptcha",
    googlekey: sitekey,
    pageurl: siteUrl,
    proxy: `${proxyConfig.host}:${proxyConfig.port}:${proxyConfig.user}:${proxyConfig.pass}`,
    proxytype: proxyConfig.type || "HTTP",
    json: 1,
  };

  const submit = await axios.post(`${API}/in.php`, null, { params });
  const taskId = submit.data.request;

  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));

    const result = await axios.get(`${API}/res.php`, {
      params: { key: CAPTCHAAI_KEY, action: "get", id: taskId, json: 1 },
    });

    if (result.data.request === "CAPCHA_NOT_READY") continue;
    if (result.data.status === 1) return result.data.request;
  }

  throw new Error("Timeout");
}

// Usage
const token = await solveWithProxy(
  "https://example.com/form",
  "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
  {
    host: "proxy.example.com",
    port: 8080,
    user: "myuser",
    pass: "mypass",
    type: "HTTP", // HTTP, HTTPS, SOCKS4, or SOCKS5
  }
);

Форматы конкретных провайдеров

Формат строки один — различается только хост и логин провайдера:

# Bright Data
proxy = "brd.superproxy.io:22225:brd-customer-ID-zone-residential:PASSWORD"
proxytype = "HTTP"

# Smartproxy
proxy = "gate.smartproxy.com:10001:spuser:sppassword"
proxytype = "HTTP"

# Oxylabs
proxy = "pr.oxylabs.io:7777:customer-USERNAME:PASSWORD"
proxytype = "HTTP"

Типичный кейс: команда парсит данные по ЕС и держит воркеры в европейском дата-центре — под нужную геолокацию берёт резидентный прокси с привязкой к региону. Тогда параметр proxy обязателен: без него решение может прийти с адреса из другой страны, и цель отклонит токен, хотя запрос к API прошёл успешно. Если при этом собираются персональные данные, для аудитории из РФ уместно свериться со 152-ФЗ «О персональных данных» — это дисциплина сбора данных, а не свойство CaptchaAI.


Формат параметра proxy по типам

Сводка форматов строки для всех proxytype, которые принимает API:

Тип прокси Формат строки Пример
HTTP host:port:user:pass proxy.com:8080:user:pass
HTTPS host:port:user:pass proxy.com:8443:user:pass
SOCKS4 host:port:user:pass proxy.com:1080:user:pass
SOCKS5 host:port:user:pass proxy.com:1080:user:pass
Белый список IP host:port proxy.com:8080

Типичные ошибки и их устранение

  • ERROR_PROXY_NOT_AUTHORIZED — неверные логин/пароль или IP не в белом списке. Проверьте учётные данные прокси и добавьте IP CaptchaAI в белый список.
  • ERROR_PROXY_CONNECTION_FAILED — CaptchaAI не может достучаться до прокси. Убедитесь, что прокси доступен с внешних IP-адресов, а не только из вашей сети.
  • Токен отклонён целевым сайтом — IP прокси не совпадает с IP, с которого загружалась страница. Используйте один и тот же липкий (sticky) сеанс для обоих запросов.
  • Решение выполняется медленнее обычного — прокси добавляет задержку в маршрут между CaptchaAI и целью. Смиритесь с задержкой или возьмите более быстрый прокси.
  • ERROR_BAD_PARAMETERS — неверный формат строки прокси. Используйте формат host:port:user:pass, без лишних пробелов и протокола в начале строки.

Частые вопросы

Как понять, что конкретному сценарию нужен прокси?

Смотрите не на тип CAPTCHA, а на то, проверяет ли цель источник токена. reCAPTCHA v2 почти всегда работает без прокси; Cloudflare Turnstile, Cloudflare Challenge и сессии с привязкой к IP — требуют его практически всегда.

Подойдёт ли бесплатный прокси, или нужен платный?

Технически подойдёт любой прокси, принимающий подключения из внешней сети, но бесплатные и публичные прокси обычно нестабильны и часто уже перегружены — это увеличивает долю ERROR_PROXY_CONNECTION_FAILED и медленных решений. Для продакшена лучше взять выделенный прокси у провайдера уровня Bright Data, Smartproxy или Oxylabs.

Как оформить строку прокси для Bright Data, Smartproxy или Oxylabs?

Формат один — host:port:user:pass, различается только хост и логин провайдера. Примеры выше.

Что делать при ERROR_PROXY_CONNECTION_FAILED?

Серверы CaptchaAI не смогли достучаться до прокси. Проверьте доступность с внешних IP и белый список.

Нужна ли липкая (sticky) сессия при работе с резидентными прокси?

Да, если цель проверяет IP. Ротируемый прокси может отдать CaptchaAI и странице разные узлы — токен решится не с того IP, и цель его отклонит. Большинство провайдеров резидентных прокси включают липкую сессию отдельным параметром или суффиксом в логине — уточните формат у своего провайдера.


Похожие материалы


Настройте прокси в первом же запросе — получите API-ключ CaptchaAI.

Комментарии для этой статьи отключены.