使用 Python HTTPX 提交 reCAPTCHA 令牌
向目标发送 POST 请求时,使用 solution.token、解题成功时使用的代理以及返回的浏览器身份。将应用的 Cookie 保留在同一个 HTTPX 客户端中;有效令牌不能取代应用对会话或 CSRF 的要求。
本页内容
通过成功使用的代理发送已就绪的令牌
通过 pip install httpx 安装 HTTPX。此示例还使用了官方 Python SDK;如果尚未安装,请参阅 Python SDK 设置。
示例包含解题调用,以说明结果的来源。如果你已有状态为 ready 的 SDK 结果,请将其作为 result,与原始 request 一起复用。不要仅为提交令牌而再创建一个任务。
- 将
SOLVETHREE_API_KEY设为工作区 API 密钥,将SOLVETHREE_PROXY设为代理 URL。请将 API 密钥保留在服务器端。 - 将
accounts.example.com、login操作和提交 URL 替换为预期目标所用的值。该主机名需要在工作区中有有效的站点配置;请参阅站点配置设置。 - 根据应用的实际请求调整表单字段。示例只发送 CAPTCHA 字段,并非完整的登录表单。
# 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 可防止环境代理设置更改显式选择的路由。
配套保留 Cookie、浏览器身份和表单字段
如果应用要求先请求页面以建立会话或获取 CSRF 值,请在发送 POST 之前,在同一个 HTTPX 客户端中发出该请求。客户端的 Cookie 容器会在请求之间保留 Cookie。单独的客户端不会自动拥有该会话。
这些前置请求也应使用返回的 userAgent 和 secChUa,而不是无关的浏览器身份。示例在 POST 请求中将它们作为 User-Agent 和 sec-ch-ua 提供。向预期目标提交解题结果时,请保持这些请求头和成功使用的代理一致。
data= 用于发送表单数据。此处,g-recaptcha-response 接收 solution.token;不能传入任务 ID 或整个解题结果字典。字段名应与目标的实际请求一致,并在同一次提交中包含所需的凭据、隐藏字段和 CSRF 值。
确认提交成功之前,先检查重定向
follow_redirects=False 让你可以查看应用的首次响应。如果响应发生重定向,请先检查其状态和目标地址,再使用同一个客户端显式执行应用预期的下一步操作。不要自动将令牌重新发送到其他 URL。
打印出的 HTTP 状态只是判断的起点。请检查响应正文、重定向目标地址或最终的应用状态,以确定目标是否接受了请求。200 响应或重定向既可能表示成功,也可能属于错误流程;solvethree 的 ready 状态表示已生成解题结果,并不表示目标已接受该结果。
来源与 API 参考
运行您的第一个任务。
使用 $5 工作区额度开始体验。