Hunt Captcha
O Hunt CAPTCHA é um sistema antibot que analisa o comportamento do usuário e inicia uma verificação interativa ao detectar atividades suspeitas.
Exemplos de tarefas
Abaixo estão alguns exemplos de variantes do Hunt CAPTCHA compatíveis com o CapMonster Cloud:



O CapMonster Cloud oferece suporte a:
- geração de X-HD;
- resolução do CAPTCHA por meio de
meta.token; - resolução do CAPTCHA por meio de
widgetUrl.
Para executar esta tarefa, utilize seus próprios proxies.
Escolha do cenário
| Cenário | Parâmetros em metadata | Resultado |
|---|---|---|
| Geração de X-HD | apiGetLib | X-HD |
Resolução por meio de meta.token | apiGetLib, data | Token de resolução do CAPTCHA |
Resolução por meio de widgetUrl | apiGetLib, widgetUrl | Token de resolução do CAPTCHA |
Use widgetUrl quando o link completo do widget estiver disponível na página. Nesse cenário, não é necessário obter o X-HD nem o meta.token.
Se widgetUrl não estiver disponível, primeiro gere o X-HD, obtenha o meta.token do site e depois crie uma tarefa com o parâmetro data (consulte a seção Exemplo de resolução do Hunt CAPTCHA por meio de data).
Parâmetros da solicitação
IMPORTANTE: os valores de alguns parâmetros são dinâmicos — eles mudam sempre que a página com o Hunt é renderizada.
Extraia-os imediatamente antes de criar a tarefa para evitar erros durante a resolução. Para ver exemplos de extração automática dos parâmetros, consulte as seções Como obter o widgetUrl e Exemplo de resolução do Hunt CAPTCHA por meio de data.
type<string>requiredCustomTask
class<string>requiredHUNT
websiteURL<string>requiredURL completo da página em que o Hunt CAPTCHA é usado.
apiGetLib (dentro de metadata)<string>requiredLink completo para o arquivo api.js.
Exemplo:
https://example.com/hd-api/external/apps/<app-hash>/api.js
Localize a solicitação para api.js no DevTools, na guia Network. Use hd-api ou api.js na busca.
data (dentro de metadata)<string>optionalValor de meta.token obtido do site.
Importante: envie esse parâmetro somente ao resolver o CAPTCHA por meio de meta.token. Não o use junto com widgetUrl.
widgetUrl (dentro de metadata)<string>optionalURL completo do widget do Hunt CAPTCHA.
Exemplo:
https://captcha.example.com/widget?hash=<widget-hash>
Importante: envie o link completo, incluindo domínio, caminho e parâmetros da solicitação. Não o use junto com data.
userAgent<string>optionalUser-Agent do navegador. Use o valor atual compatível com o CapMonster Cloud: userAgentPlaceholder
Você pode obter o valor mais recente em: https://capmonster.cloud/api/useragent/actual.
proxyType<string>requiredhttp - proxy HTTP/HTTPS normal;
https - use se http não funcionar (necessário para alguns proxies personalizados);
socks4 - proxy SOCKS4;
socks5 - proxy SOCKS5.
proxyAddress<string>requiredEndereço IP do proxy (IPv4/IPv6). Não permitido:
- Proxies transparentes
- Proxies da máquina local
proxyPort<integer>requiredPorta do proxy.
proxyLogin<string>requiredLogin do proxy.
proxyPassword<string>requiredSenha do proxy.
Criar método de tarefa
Use o método createTask:
https://api.capmonster.cloud/createTask
Geração de X-HD
Envie somente apiGetLib dentro de metadata.
Exemplo de solicitação
{
"clientKey": "API_KEY",
"task": {
"type": "CustomTask",
"class": "HUNT",
"websiteURL": "https://yourwebsite.com/page-with-hunt",
"metadata": {
"apiGetLib": "https://example.com/hd-api/external/apps/<app-hash>/api.js"
},
"userAgent": "userAgentPlaceholder",
"proxyType": "your-proxy-type",
"proxyAddress": "your-proxy-address",
"proxyPort": 1234,
"proxyLogin": "your-proxy-login",
"proxyPassword": "your-proxy-password"
}
}
Exemplo de resposta
{
"errorId": 0,
"taskId": 407533072
}
Resolução por meio de meta.token
Use este cenário se o parâmetro widgetUrl não estiver disponível.
Etapa 1. Obtenha o X-HD
- Crie uma tarefa enviando apenas
apiGetLib. - Obtenha o X-HD na resposta de
getTaskResult.
Etapa 2. Obtenha o meta.token
Envie o X-HD obtido em uma solicitação ao site de destino, por exemplo, ao solicitar um código por SMS.
-f3f729be80407dcfa979c939fcfb300a.png)
-1-feced69f9da880f442fb82a0d025775d.png)
Se o site exigir a verificação CAPTCHA, ele retornará uma resposta semelhante a esta:
{
"errors": [
{
"code": "113",
"title": "Captcha error"
}
],
"meta": {
"token": "SITE_META_TOKEN"
}
}
-cb52653b917e55094fa4dbc891cd1746.png)
Etapa 3. Resolva a CAPTCHA
Crie uma nova tarefa e envie:
apiGetLib;- o
meta.tokenobtido no parâmetrodata.
Exemplo de solicitação
{
"clientKey": "API_KEY",
"task": {
"type": "CustomTask",
"class": "HUNT",
"websiteURL": "https://example.com/page-with-hunt",
"metadata": {
"apiGetLib": "https://example.com/hd-api/external/apps/<app-hash>/api.js",
"data": "SITE_META_TOKEN"
},
"userAgent": "userAgentPlaceholder",
"proxyType": "your-proxy-type",
"proxyAddress": "your-proxy-address",
"proxyPort": 1234,
"proxyLogin": "your-proxy-login",
"proxyPassword": "your-proxy-password"
}
}
Exemplo de resposta
{
"errorId": 0,
"taskId": 407533072
}
Resolução por meio de widgetUrl
Use este cenário quando o link completo do widget do Hunt CAPTCHA estiver disponível na página.
Não é necessário obter o X-HD nem o meta.token.
Como obter o widgetUrl
- Abra a página com o Hunt CAPTCHA.
- Abra o DevTools e acesse a guia Network.
- Execute a ação que faz o CAPTCHA aparecer.
- Localize a solicitação usando os termos
widgetouhash. - Copie o valor completo de Request URL.
- Envie-o em
widgetUrl(dentro demetadata).

Obtenha o widgetUrl atual na mesma sessão, imediatamente antes de criar a tarefa.
Não envie apenas o valor de hash: o serviço precisa do URL completo.
Exemplo de solicitação
{
"clientKey": "API_KEY",
"task": {
"type": "CustomTask",
"class": "HUNT",
"websiteURL": "https://example.com/page-with-hunt",
"metadata": {
"apiGetLib": "https://example.com/hd-api/external/apps/<app-hash>/api.js",
"widgetUrl": "https://captcha.example.com/widget?hash=<widget-hash>"
},
"userAgent": "userAgentPlaceholder",
"proxyType": "your-proxy-type",
"proxyAddress": "your-proxy-address",
"proxyPort": 1234,
"proxyLogin": "your-proxy-login",
"proxyPassword": "your-proxy-password"
}
}
Exemplo de resposta
{
"errorId": 0,
"taskId": 407533072
}
Obter resultado da tarefa
Use o método getTaskResult para obter o fingerprint X-HD ou a solução do Hunt CAPTCHA:
https://api.capmonster.cloud/getTaskResult
Exemplo de solicitação
{
"clientKey": "API_KEY",
"taskId": 407533072
}
Exemplo de resposta
{
"errorId": 0,
"status": "ready",
"solution": {
"data": {
"token": "6IyDCCpDdSK...YGs1Wug/z/kLNSpjewI="
}
}
}
O valor de solution.data.token depende do cenário:
- ao gerar o X-HD, contém o X-HD;
- ao resolver por meio de
data, contém o token de resolução do CAPTCHA; - ao resolver por meio de
widgetUrl, contém o token de resolução do CAPTCHA.
Como trabalhar com cookies
O site de destino pode usar cookies específicos para gerenciar a sessão. Se eles estiverem ausentes ou não forem enviados nas solicitações, o servidor poderá rejeitar a solicitação ou exigir uma nova verificação.
Exemplo de cookies obtidos do site:
platform_type=desktop; typeBetNames=full; _glhf=1234567890; coefview=0; visit=1-123abc012345d1be726746568edc62d9; fast_coupon=true;
v3fr=1; lng=en; flaglng=en; SESSION=12a3aea8cdcfdbb9e7df8ee99b526a84; auid=ab0dW2mqlz1Tjo2AAwplAg==; ggru=195; che_g=12abcede-691f-c7b2-d1e8-8488bc557d98
Princípio geral de funcionamento com cookies:
-
Primeiro, abra a página do site ou envie uma solicitação GET para a página necessária. Isso permite que o servidor inicialize a sessão do usuário e defina os cookies necessários.
-
Na resposta, o servidor envia os cookies por meio do cabeçalho
Set-Cookie. Esses cookies podem conter o identificador da sessão, parâmetros de segurança e dados da proteção antibot. -
Salve os cookies recebidos, pois eles serão usados para identificar o cliente nas solicitações seguintes.
-
Ao enviar solicitações posteriores à API, devolva os cookies ao servidor no cabeçalho
Cookie, para que ele reconheça que a solicitação pertence à mesma sessão. -
Todas as solicitações devem ser feitas na mesma sessão, com o mesmo IP (ou proxy) e User-Agent. Caso contrário, o servidor poderá considerar a solicitação suspeita e exigir uma nova verificação.
-
Alguns cookies podem ser criados no lado do cliente, por exemplo, pelo JavaScript da página. Durante a automação ou os testes, pode ser necessário extrair esses cookies do navegador ou gerá-los de forma semelhante.
Exemplo de resolução do Hunt CAPTCHA por meio de data
Abaixo está um exemplo completo de resolução usando X-HD e meta.token. Use-o quando widgetUrl não estiver disponível.
O código mostra como:
- obter os cookies iniciais ao abrir a página do site;
- gerar cookies adicionais que podem ser criados no lado do cliente;
- criar, por meio do CapMonster Cloud, um fingerprint (X-HD) usado pelo site para verificar as solicitações;
- enviar uma solicitação à API do site para iniciar uma ação, como o envio de SMS;
- enviar os dados recebidos ao serviço de resolução de CAPTCHA;
- depois de obter a solução, enviar a solicitação final à API com os parâmetros necessários.
Use cabeçalhos HTTP atualizados (saiba mais na seção sobre cabeçalhos) e um User-Agent correto.
- JavaScript
- Python
Mostrar código (Node.js)
import { gotScraping } from "got-scraping";
import crypto from "crypto";
/* ================= CONFIG (recomendamos armazenar no .env) ================= */
// Configurações da API do CapMonster Cloud, do site e dados do usuário
const API_KEY = "YOUR_API_KEY"; // Sua chave de API do CapMonster Cloud
const SOLVER_URL = "https://api.capmonster.cloud";
const BASE_URL = "https://example.com"; // URL base do site
const API_GET_LIB =
"https://example.com/hd-api/external/apps/a1047eab1035d58682a53557e0b2a75edbfd15fd/api.js"; // api.js do site
const PHONE = "91123456789"; // Telefone para cadastro (sem o código do país)
const COUNTRY_CODE = "54"; // Código do país
const UA = "userAgentPlaceholder"; // User-Agent para as solicitações
/* ================= Configurações do proxy ================= */
const PROXY_HOST = "proxyAddress";
const PROXY_PORT = 8080;
const PROXY_USER = "proxyLogin";
const PROXY_PASS = "proxyPassword";
const PROXY = `http://${PROXY_USER}:${PROXY_PASS}@${PROXY_HOST}:${PROXY_PORT}`;
/* ================= HEADERS ================= */
// Cabeçalhos para solicitações HTTP
// htmlHeaders — para solicitações GET de páginas
// apiHeaders — para a API do site
const htmlHeaders = {
accept:
"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"accept-encoding": "gzip, deflate, br, zstd",
"accept-language": "en-US,en;q=0.9,ru;q=0.8",
"cache-control": "no-cache",
pragma: "no-cache",
priority: "u=0, i",
"sec-ch-ua": `"Not:A-Brand";v="99", "Google Chrome";v="150", "Chromium";v="150"`,
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": `"Windows"`,
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "none",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1",
"user-agent": UA,
};
const apiHeaders = {
accept: "application/vnd.api+json",
"accept-encoding": "gzip, deflate, br, zstd",
"accept-language": "en-US,en;q=0.9,ru;q=0.8",
"cache-control": "no-cache",
pragma: "no-cache",
priority: "u=1, i",
"content-type": "application/vnd.api+json",
origin: BASE_URL,
referer: BASE_URL + "/", // Referer atual do site
"sec-ch-ua": `"Not:A-Brand";v="99", "Google Chrome";v="150", "Chromium";v="150"`,
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": `"Windows"`,
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"user-agent": UA,
"x-requested-with": "XMLHttpRequest",
};
/* ================= UTILS ================= */
// Funções auxiliares
const delay = (ms) => new Promise((r) => setTimeout(r, ms));
function randomString(len = 20) {
const chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
let result = "";
for (let i = 0; i < len; i++) {
result += chars[Math.floor(Math.random() * chars.length)];
}
return result;
}
/* ================= CAPMONSTER CLOUD ================= */
// Criação da tarefa e espera pela solução do CAPTCHA
async function createTask(task) {
const { body } = await gotScraping.post(`${SOLVER_URL}/createTask`, {
json: { clientKey: API_KEY, task },
responseType: "json",
});
if (body.errorId !== 0)
throw new Error("createTask error: " + JSON.stringify(body));
return body.taskId;
}
async function waitResult(taskId) {
while (true) {
const { body } = await gotScraping.post(`${SOLVER_URL}/getTaskResult`, {
json: { clientKey: API_KEY, taskId },
responseType: "json",
});
if (body.status === "ready")
return body.solution?.token || body.solution?.data?.token;
await delay(3000);
}
}
/* ================= MAIN FLOW ================= */
// Fluxo principal de cadastro automático com CAPTCHA
(async () => {
try {
// ---------------- STEP 1: Obter cookies ----------------
console.log("STEP 1 — Getting cookies...");
const base = await gotScraping.get(
BASE_URL + "/registration?type=phone_reg", // Substitua pela página de cadastro atual do site
{
headers: htmlHeaders,
proxyUrl: PROXY,
},
);
// Salvar os cookies recebidos do servidor
let cookies = (base.headers["set-cookie"] || [])
.map((c) => c.split(";")[0])
.join("; ");
// Gerar cookies adicionais criados no lado do cliente
const che_g = crypto.randomUUID();
const ggru = randomString();
cookies += `; che_g=${che_g}`;
cookies += `; ggru=${ggru}`;
console.log("Cookies:", cookies);
// ---------------- STEP 2: Criar o fingerprint ----------------
console.log("\nSTEP 2 — Creating fingerprint...");
const fingerprintTaskId = await createTask({
type: "CustomTask",
class: "HUNT",
websiteURL: BASE_URL + "/",
userAgent: UA,
metadata: { apiGetLib: API_GET_LIB },
proxyType: "http",
proxyAddress: PROXY_HOST,
proxyPort: PROXY_PORT,
proxyLogin: PROXY_USER,
proxyPassword: PROXY_PASS,
});
const xhd = await waitResult(fingerprintTaskId);
console.log("X-HD:", xhd);
// ---------------- STEP 3: Enviar solicitação de SMS ----------------
console.log("\nSTEP 3 — Trigger SMS...");
const smsResp = await gotScraping.post(
BASE_URL + "/web-api/api/web/registration/v2/sms", // Substitua pelo endpoint atual da API do site
{
headers: { ...apiHeaders, cookie: cookies, "x-hd": xhd },
json: {
data: { attributes: { phone: PHONE, country_code: COUNTRY_CODE } },
},
proxyUrl: PROXY,
responseType: "json",
},
);
const metaToken = smsResp.body?.meta?.token;
if (!metaToken) {
console.log("SMS response:", smsResp.body);
throw new Error("meta.token not received");
}
console.log("meta.token:", metaToken);
// ---------------- STEP 4: Resolver o CAPTCHA ----------------
console.log("\nSTEP 4 — Solving Hunt captcha...");
const solveTaskId = await createTask({
type: "CustomTask",
class: "HUNT",
websiteURL: BASE_URL + "/",
userAgent: UA,
metadata: { apiGetLib: API_GET_LIB, data: metaToken },
proxyType: "http",
proxyAddress: PROXY_HOST,
proxyPort: PROXY_PORT,
proxyLogin: PROXY_USER,
proxyPassword: PROXY_PASS,
});
const captchaToken = await waitResult(solveTaskId);
console.log("Captcha token:", captchaToken);
// ---------------- STEP 5: Solicitação final ----------------
console.log("\nSTEP 5 — Sending final request...");
const finalResp = await gotScraping.post(
BASE_URL + "/api/web/registration/v2/sms", // Substitua pelo endpoint atual da API do site
{
headers: { ...apiHeaders, cookie: cookies, "x-hd": xhd },
body: JSON.stringify({
data: {
attributes: {
phone: PHONE,
country_code: parseInt(COUNTRY_CODE),
captcha: captchaToken,
},
},
}),
proxyUrl: PROXY,
},
);
console.log("\nFINAL RESPONSE HEADERS:", finalResp.headers);
console.log("\nFINAL RESPONSE BODY:", finalResp.body);
} catch (err) {
console.error("\nFATAL ERROR:");
console.error(err);
}
})();
Mostrar código
import requests
import uuid
import random
import string
import time
# ================= CONFIG (recomendamos armazenar no .env) =================
# Configurações da API do CapMonster Cloud, do site e dados do usuário
API_KEY = "YOUR_CAPMONSTER_API_KEY" # Substitua pela sua chave de API do CapMonster Cloud
SOLVER_URL = "https://api.capmonster.cloud"
BASE_URL = "https://example.com" # URL base do site
API_GET_LIB = "https://example.com/hd-api/external/apps/c1e24d5857463de4393e3f1489b00ebd4495da64/api.js" # Substitua pelo link atual do api.js do site
PHONE = "9102345678" # Telefone para cadastro (sem o código do país)
COUNTRY_CODE = "7" # Código do país
UA = "userAgentPlaceholder" # User-Agent
# ================= Configurações do proxy =================
PROXY_HOST = "proxyAdress"
PROXY_PORT = 8080
PROXY_LOGIN = "proxyLogin"
PROXY_PASSWORD = "proxyPassword"
PROXY = f"http://{PROXY_LOGIN}:{PROXY_PASSWORD}@{PROXY_HOST}:{PROXY_PORT}"
proxies = {
"http": PROXY,
"https": PROXY
}
# ================= HEADERS =================
# Cabeçalhos para solicitações HTTP
# html_headers — para solicitações GET comuns de páginas
# api_headers — para solicitações à API do site
html_headers = {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
"accept-encoding": "gzip, deflate, br, zstd",
"accept-language": "en-US,en;q=0.9,ru;q=0.8",
"cache-control": "no-cache",
"pragma": "no-cache",
"priority": "u=0, i",
"sec-ch-ua": '"Not:A-Brand";v="99", "Google Chrome";v="150", "Chromium";v="150"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "none",
"sec-fetch-user": "?1",
"upgrade-insecure-requests": "1",
"user-agent": UA
}
api_headers = {
"accept": "application/vnd.api+json",
"accept-encoding": "gzip, deflate, br, zstd",
"accept-language": "en-US,en;q=0.9,ru;q=0.8",
"cache-control": "no-cache",
"pragma": "no-cache",
"priority": "u=1, i",
"content-type": "application/vnd.api+json",
"origin": BASE_URL,
"referer": BASE_URL + "/en", # Substitua pelo referer atual do site
"sec-ch-ua": '"Not:A-Brand";v="99", "Google Chrome";v="150", "Chromium";v="150"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"user-agent": UA,
"x-requested-with": "XMLHttpRequest"
}
# ================= UTILS =================
# Funções auxiliares
def delay(ms):
"""Pausa em milissegundos"""
time.sleep(ms / 1000)
def random_string(length=20):
"""Geração de uma string aleatória (letras + números)"""
chars = string.ascii_letters + string.digits
return ''.join(random.choice(chars) for _ in range(length))
# ================= CAPMONSTER CLOUD =================
# Funções para trabalhar com o CapMonster Cloud (criação da tarefa e espera pela solução do CAPTCHA)
def create_task(task):
"""Criação de uma tarefa no CapMonster Cloud"""
r = requests.post(
SOLVER_URL + "/createTask",
json={
"clientKey": API_KEY,
"task": task
}
)
data = r.json()
if data["errorId"] != 0:
raise Exception("createTask error: " + str(data))
return data["taskId"]
def wait_result(task_id):
"""Espera pelo resultado da tarefa"""
while True:
r = requests.post(
SOLVER_URL + "/getTaskResult",
json={
"clientKey": API_KEY,
"taskId": task_id
}
)
data = r.json()
if data["status"] == "ready":
solution = data.get("solution", {})
return solution.get("token") or solution.get("data", {}).get("token")
delay(3000)
# ================= SESSION =================
# Criar uma sessão requests para preservar os cookies entre as solicitações
session = requests.Session()
# ================= MAIN =================
# Fluxo principal de cadastro automático com CAPTCHA
try:
# ---------------- STEP 1: Obter cookies ----------------
print("STEP 1 — Getting cookies")
r = session.get(
BASE_URL + "/en/registration?type=phone", # Substitua pela página de registro atual do site
headers=html_headers,
proxies=proxies
)
# Salvar os cookies recebidos do servidor
cookies = "; ".join([f"{c.name}={c.value}" for c in session.cookies])
# Gerar cookies adicionais criados no lado do cliente
che_g = str(uuid.uuid4())
ggru = random_string()
cookies += f"; che_g={che_g}"
cookies += f"; ggru={ggru}"
print("Cookies:", cookies)
# ---------------- STEP 2: Criar o fingerprint ----------------
print("\nSTEP 2 — Creating fingerprint")
fingerprint_task = create_task({
"type": "CustomTask",
"class": "HUNT",
"websiteURL": BASE_URL + "/en/",
"userAgent": UA,
"metadata": {
"apiGetLib": API_GET_LIB
},
"proxyType": "http",
"proxyAddress": PROXY_HOST,
"proxyPort": PROXY_PORT,
"proxyLogin": PROXY_LOGIN,
"proxyPassword": PROXY_PASSWORD
})
# Obter o resultado (X-HD) necessário para a API do site
xhd = wait_result(fingerprint_task)
print("X-HD:", xhd)
# ---------------- STEP 3: Enviar solicitação de SMS ----------------
print("\nSTEP 3 — Trigger SMS")
sms_resp = session.post(
BASE_URL + "/web-api/api/web/registration/v2/sms", # Substitua pelo endpoint atual da API do site
headers={**api_headers, "cookie": cookies, "x-hd": xhd},
json={
"data": {
"attributes": {
"phone": PHONE,
"country_code": COUNTRY_CODE
}
}
},
proxies=proxies
)
print("Status:", sms_resp.status_code)
try:
sms_data = sms_resp.json()
except:
print("Server returned non JSON:")
print(sms_resp.text)
raise Exception("Invalid JSON response")
meta_token = sms_data.get("meta", {}).get("token")
if not meta_token:
print("SMS response:", sms_data)
raise Exception("meta.token not received")
print("meta.token:", meta_token)
# ---------------- STEP 4: Resolver o CAPTCHA ----------------
print("\nSTEP 4 — Solving captcha")
solve_task = create_task({
"type": "CustomTask",
"class": "HUNT",
"websiteURL": BASE_URL + "/en/",
"userAgent": UA,
"metadata": {
"apiGetLib": API_GET_LIB,
"data": meta_token
},
"proxyType": "http",
"proxyAddress": PROXY_HOST,
"proxyPort": PROXY_PORT,
"proxyLogin": PROXY_LOGIN,
"proxyPassword": PROXY_PASSWORD
})
captcha_token = wait_result(solve_task)
print("Captcha token:", captcha_token)
# ---------------- STEP 5: Solicitação final ----------------
print("\nSTEP 5 — Final request")
final = session.post(
BASE_URL + "/web-api/api/web/registration/v2/sms", # Substitua pelo endpoint atual da API do site
headers={**api_headers, "cookie": cookies, "x-hd": xhd},
json={
"data": {
"attributes": {
"phone": PHONE,
"country_code": int(COUNTRY_CODE),
"captcha": captcha_token
}
}
},
proxies=proxies
)
print("\nFINAL STATUS:", final.status_code)
try:
print(final.json())
except:
print(final.text)
except Exception as e:
print("\nFATAL ERROR")
print(e)
