Python HTTPX로 reCAPTCHA 토큰 제출하기

작성: solvethree읽는 데 2분

대상에 POST 요청을 보낼 때는 solution.token, 풀이에 성공한 프록시, 반환된 브라우저 식별 정보를 사용하세요. 애플리케이션의 쿠키는 하나의 HTTPX 클라이언트에 유지하세요. 유효한 토큰이 있어도 세션이나 CSRF 요구 사항을 대신할 수는 없습니다.

이 페이지의 내용

성공한 프록시를 통해 준비된 토큰 전송

pip install httpx로 HTTPX를 설치하세요. 이 예제는 공식 Python SDK도 사용합니다. 설치하지 않았다면 Python SDK 설정을 참고하세요.

이 예제에는 결과를 얻는 과정을 보여 주기 위해 풀이 호출이 포함되어 있습니다. 이미 ready 상태의 SDK 결과가 있다면 원래 request와 함께 result로 재사용하세요. 토큰을 제출하기 위해 작업을 새로 생성하지 마세요.

  • 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)는 제출 시 재사용할 프록시를 선택합니다. 유효한 프록시를 반환하지 않으면 제출을 중단하는 검사를 유지하세요. proxies=가 아니라 HTTPX의 현재 단수형 매개변수인 proxy=를 사용하세요. trust_env=False를 설정하면 환경의 프록시 설정이 명시적으로 선택한 경로를 변경하지 못합니다.

쿠키, 브라우저 식별 정보, 폼 필드를 함께 유지

애플리케이션에서 세션을 설정하거나 CSRF 값을 얻기 위해 초기 페이지 요청이 필요하다면, POST 전에 동일한 HTTPX 클라이언트에서 해당 요청을 보내세요. 클라이언트의 쿠키 저장소는 요청 간에 쿠키를 유지합니다. 별도 클라이언트에 해당 세션이 자동으로 전달되지는 않습니다.

이러한 사전 요청에도 관련 없는 브라우저 식별 정보가 아니라 반환된 userAgent와 secChUa를 사용하세요. 이 예제는 POST 요청에 이를 User-Agent와 sec-ch-ua로 제공합니다. 의도한 대상에 풀이 결과를 제출할 때 이 헤더와 성공한 프록시를 일관되게 유지하세요.

data=는 폼 데이터를 전송합니다. 여기서 g-recaptcha-response에는 solution.token을 넣어야 하며, 작업 ID나 풀이 결과 딕셔너리 전체를 넣으면 안 됩니다. 필드 이름을 대상의 실제 요청에 맞추고, 필요한 자격 증명, 숨겨진 필드, CSRF 값을 같은 제출에 포함하세요.

제출 성공으로 판단하기 전에 리디렉션 확인

follow_redirects=False는 애플리케이션의 첫 응답을 그대로 확인할 수 있게 합니다. 리디렉션이 발생하면 상태와 목적지를 확인한 뒤, 동일한 클라이언트로 애플리케이션이 예상하는 다음 단계를 명시적으로 진행하세요. 토큰을 다른 URL로 자동 재전송하지 마세요.

출력된 HTTP 상태는 확인의 시작일 뿐입니다. 대상이 요청을 수락했는지 판단하려면 응답 본문, 리디렉션 목적지 또는 요청 후 애플리케이션 상태를 확인하세요. 200 응답이나 리디렉션은 성공 흐름일 수도, 오류 흐름일 수도 있습니다. solvethree의 ready 상태는 풀이 결과가 생성되었다는 뜻이지, 대상이 수락했다는 뜻은 아닙니다.

첫 작업을 실행하세요.

워크스페이스 크레딧 $5로 시작하세요.

워크스페이스 만들기
Python HTTPX로 reCAPTCHA 토큰 제출하기 · solvethree