추가 작업 비용 없이 시간 초과된 요청 복구하기

작성: solvethree읽는 데 2분

연결 시간 초과가 작업 생성 실패를 뜻하지는 않습니다. 응답이 유실되기 전에 solvethree가 이미 작업을 생성했을 수 있습니다. 새 논리적 작업을 제출하는 대신, 동일한 작업 입력과 동일한 requestId로 다시 전송해 기존 작업을 복구하세요.

이 페이지의 내용

요청을 저장한 뒤 변경 없이 재전송

requestId는 여러 생성 시도에서 하나의 논리적 작업을 식별합니다. ASCII 영문자, 숫자, 밑줄 또는 하이픈으로 구성된 1–64자를 사용할 수 있습니다. 요청을 보내기 전에 정하고 원래 작업 입력과 함께 보관하세요.

  1. 1.

    작업 본문 저장

    requestId를 포함한 전체 요청을 request.json에 저장하세요. reCAPTCHA Enterprise의 경우 호스트 이름 형식의 site, action, 그리고 proxy 또는 proxyCandidates 중 정확히 하나를 포함하세요. type이나 url은 추가하지 마세요. 파일에 프록시 인증 정보가 포함되므로 비공개로 보관하세요.

  2. 2.

    저장한 파일 전송

    워크스페이스 API 키로 아래 명령을 실행하세요. 키는 서버에 보관하세요.

  3. 3.

    연결 시간이 초과되면 명령 다시 실행

    동일한 명령과 변경하지 않은 request.json을 사용하세요. 응답이 도착하지 않았다는 이유만으로 다른 requestId를 생성하거나 작업 입력을 수정하지 마세요.

cURL · 동일한 요청 파일 재전송
# request.json contains one valid task body and a saved requestId.
# Keep the file private: it contains your proxy credentials.
curl --fail-with-body --max-time 30 \
  'https://api.solvethree.com/v1/tasks?waitMs=0' \
  -H "Authorization: Bearer $SOLVETHREE_API_KEY" \
  -H 'Content-Type: application/json' --data-binary @request.json

# If the connection broke, run the identical command with the identical file.
# New task: HTTP 201. Same requestId + same inputs: HTTP 200, existing task.
# Same requestId + changed inputs: HTTP 409.

HTTP 201은 새 작업이 생성되었음을 뜻합니다. HTTP 200은 동일한 요청으로 기존 작업을 복구했음을 뜻합니다. 어느 경우든 반환된 작업 ID와 상태를 확인하세요. 두 HTTP 상태 모두 그 자체로 솔루션이 준비되었음을 뜻하지는 않습니다.

입력 변경의 구체적인 예로, 저장된 요청의 action이 login으로 설정되어 있다고 가정해 보겠습니다. 동일한 requestId를 유지한 채 이를 checkout으로 바꾸면 요청 ID 충돌인 HTTP 409가 반환됩니다. 원래 작업을 복구하려면 원래 파일로 되돌린 뒤 재전송하세요. 의도적으로 변경된 입력이 필요하다면 해당 새 논리적 작업에 새 requestId를 부여하세요.

작업 성공 페이로드를 읽기 전에 성공이 아닌 HTTP 응답을 처리하세요. 409는 HTTP 요청 오류이며, 원래 작업이 최종 실패 상태에 도달했다는 뜻은 아닙니다.

SDK 오류에서 ID 복구

두 공식 SDK 모두 requestId를 생략하면 자동 생성하지만, 작업 생성은 자동으로 재시도하지 않습니다. SDK 호출에서 예외가 발생하면 다른 작업을 시작하기 전에 복구 필드를 확인하세요.

  • JavaScript: SolvethreeError는 requestId와 taskId를 제공합니다.
  • Python: SolvethreeError는 request_id와 task_id를 제공합니다.

오류에 작업 ID가 있으면 해당 작업의 GET 폴링을 재개하세요. 생성을 반복할 필요는 없습니다. 요청 ID만 있으면 해당 ID와 원래 입력으로 생성 요청을 재전송한 뒤 반환된 작업 ID를 사용하세요. SDK가 ID를 생성한 경우에도 원래 입력을 보관하는 것이 중요합니다.

모든 예외를 생성 중단으로 간주하지 마세요. TaskFailedError는 이미 최종 실패 상태에 도달한 작업을 나타내며, 복구가 필요한 요청이 아닙니다.

복구한 작업으로 계속 진행

GET /v1/tasks/:id로 복구한 작업을 조회하세요. 상태가 pending 또는 solving인 동안 폴링을 계속하세요. 사용 가능한 솔루션은 ready 상태에만 포함됩니다.

상태가 failed이면 폴링을 중단하고 errorCode와 error를 확인하세요. 풀이에 실패하면 환불됩니다. 이는 웹사이트가 생성된 솔루션을 거부하는 경우와 다릅니다. ready는 솔루션을 사용할 수 있다는 뜻이지, 대상 사이트가 이를 수락했다는 뜻은 아닙니다.

완료된 결과는 보존 기간이 만료되면 HTTP 410을 반환할 수 있으므로 복구 기능이 영구적인 결과 저장소는 아닙니다. 폴링 루프 자체에 대해서는 작업 폴링 및 시간 초과를 참고하세요.

아직 해결되지 않았나요?

작업 ID와 발생한 오류를 지원팀에 보내 주세요.

지원팀에 문의
추가 작업 비용 없이 시간 초과된 요청 복구하기 · solvethree