n8n에서 CAPTCHA 해결 API 호출하기

작성: solvethree읽는 데 3분

n8n의 HTTP Request 노드로 작업을 생성한 다음 상태에 따라 분기하세요. 아직 pending 또는 solving 상태라면 기다렸다가 같은 작업 ID로 조회하세요. POST를 다시 보내지 마세요.

이 페이지의 내용

사이트 및 자격 증명 설정

  1. 1.

    사이트 프로필 활성화

    solvethree 콘솔에서 대상 호스트 이름을 설정하고 해당 프로필이 워크스페이스에서 활성화되어 있는지 확인하세요. 작업에 호스트 이름과 액션을 보내도 프로필이 생성되지는 않습니다.

  2. 2.

    n8n에서 Header Auth 자격 증명 생성

    Authorization 헤더의 값으로 Bearer 뒤에 워크스페이스 API 키를 붙여 보내도록 구성하세요. 키는 작업 JSON이 아닌 자격 증명에 저장하세요.

생성 요청 구성

HTTP Request 노드의 이름을 Create task로 지정하세요. 폴링 노드는 이 이름을 참조하여 원래 작업 ID를 가져옵니다.

작업 생성 노드 구성
작업 생성 노드 구성
필드설정
결제 수단POST
URLhttps://api.solvethree.com/v1/tasks
인증일반 자격 증명 유형
일반 인증 유형Header Auth; 생성한 자격 증명 선택
쿼리 매개변수 전송활성화하고 waitMs를 값 15000으로 추가
본문 전송활성화하고 JSON을 선택한 다음 아래 본문 사용
reCAPTCHA Enterprise · 요청 구조
{
  "site": "accounts.example.com",
  "action": "login",
  "proxy": "http://user:[email protected]:8080",
  "requestId": "example_login_001"
}

site, action, proxy를 요청에 사용할 호스트 이름, 액션, 프록시로 바꾸세요. proxy와 proxyCandidates 중 정확히 하나만 보내세요. 이 예제에서는 프록시 하나를 사용합니다. type이나 url은 추가하지 마세요. 기본 reCAPTCHA 유형은 Enterprise v3입니다.

새 논리적 작업마다 예제의 requestId를 고유한 값으로 바꾸세요. 시간 초과 후 이 작업을 복구해야 한다면 해당 값을 그대로 유지하세요. ASCII 문자, 숫자, 밑줄 또는 하이픈으로 구성된 1–64자를 허용합니다.

waitMs는 JSON 본문이 아닌 URL 쿼리에 넣어야 합니다. 네트워크 오버헤드를 고려하여 HTTP 요청 시간 제한을 요청한 15초 대기 시간보다 길게 설정하세요. 30초는 합리적인 초기 설정값이지만 해결 시간을 보장하지는 않습니다. Header Auth 자격 증명이 인증을 제공하므로 헤더 전송 설정에 중복으로 추가할 필요는 없습니다.

HTTP 성공 여부가 아닌 상태에 따라 분기

작업 페이로드를 확인하기 전에 성공이 아닌 HTTP 응답을 처리하세요. 성공 응답에는 IF 또는 Switch 노드를 연결하고 {{ $json.status }}를 확인하세요.

생성 응답과 폴링 응답 모두 이 검사 단계를 거치도록 연결
생성 응답과 폴링 응답 모두 이 검사 단계를 거치도록 연결
상태다음 작업
ready폴링 루프를 종료하고 솔루션을 사용하세요.
실패폴링을 중지하세요. 진단을 위해 errorCode와 error를 기록하세요.
대기 중 또는 해결 중폴링 기한을 확인한 다음 기다렸다가 GET으로 기존 작업을 조회하세요.

ready 상태의 reCAPTCHA 작업은 반환된 userAgent와 secChUa 식별 정보, 성공한 프록시를 사용하여 반환된 토큰을 제출하세요. ready 상태는 솔루션이 생성되었다는 뜻이며, 웹사이트가 이후 요청을 수락했다는 의미는 아닙니다.

해결에 실패한 작업은 환불됩니다. 입력을 바꾸지 않고 재시도하거나 워크스페이스의 크레딧이 부족하다고 단정하지 말고, 보고된 오류를 진단하세요.

대기 후 원래 ID로 GET 요청

  1. 1.

    고정 기한 저장

    Create task가 실행되기 전에 워크플로에 폴링 기한을 저장하세요. 예를 들어 생성 시작 시점에서 2분 뒤로 설정할 수 있습니다. 이는 워크플로의 중지 정책이지 solvethree API의 제한이 아닙니다. 이후 응답이 기한을 덮어쓰지 않도록 HTTP 응답 외부에 저장하세요.

  2. 2.

    폴링할 때마다 진행 여부 확인

    pending 또는 solving 상태에서는 IF 노드로 현재 시각과 저장한 기한을 비교하세요. 기한이 지났다면 루프를 종료하고 작업 ID를 보관하세요. 그렇지 않다면 Wait 노드로 2초간 대기한 후 GET 요청 전에 기한을 다시 확인하세요.

  3. 3.

    기존 작업 조회

    아래 설정으로 두 번째 HTTP Request 노드를 구성하세요. 응답은 동일한 상태 분기로 다시 연결하세요. 폴링 분기를 Create task로 다시 연결하면 안 됩니다.

폴링용 HTTP Request 노드 구성
폴링용 HTTP Request 노드 구성
필드설정
결제 수단GET
URLhttps://api.solvethree.com/v1/tasks/{{ $('Create task').item.json.id }}
인증일반 자격 증명 유형
일반 인증 유형Header Auth; 동일한 자격 증명 선택
쿼리 매개변수 전송활성화하고 waitMs를 값 15000으로 추가
본문 전송비활성화

작업 ID 표현식은 {{ $('Create task').item.json.id }}입니다. 최신 항목에 폴링 응답이나 다른 워크플로 데이터가 들어 있어도 지정된 생성 노드에서 id를 읽습니다. 표현식의 노드 이름을 워크플로의 이름과 일치시키세요.

GET은 최대 15초의 대기를 지원합니다. 이 HTTP 요청에도 생성 요청과 동일한 시간 제한 여유를 적용하세요. 기한이 지나면 새로운 폴링 시도는 중지되지만, 이미 실행 중인 요청은 기한 이후에 완료될 수 있습니다.

n8n 외부에서 실행하는 동등한 GET 요청은 다음과 같습니다.

작업 API · 기존 작업 조회
curl --fail-with-body --max-time 30 \
  "https://api.solvethree.com/v1/tasks/$TASK_ID?waitMs=15000" \
  -H "Authorization: Bearer $SOLVETHREE_API_KEY"

다른 작업을 생성하지 않고 시간 초과된 POST 복구

연결 시간 초과가 발생했다고 해서 생성이 실패한 것은 아닙니다. ID를 받았다면 해당 작업을 조회하세요. 받지 못했다면 동일한 작업 입력과 동일한 requestId로 POST를 다시 보내 기존 작업을 복구하세요. 입력이 다른 작업에 해당 ID를 재사용하면 충돌이 발생합니다.

마찬가지로 폴링 기한 도달은 로컬 중지 조건이지 작업 실패 상태가 아닙니다. 나중에 실행할 때 다른 해결 작업에 비용을 지불하는 대신 기존 작업을 조회할 수 있도록 원래 ID를 보관하세요.

첫 작업을 실행하세요.

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

워크스페이스 만들기
n8n에서 CAPTCHA 해결 API 호출하기 · solvethree