전체 글

리다이렉트 제어 및 원시 버퍼 모드

이제 FourA API에서 구성 가능한 리다이렉트 제한과 원시 바이너리 응답을 지원합니다. 실제 스크래핑 엣지 케이스를 처리하는 방식을 바꾸는 두 가지 옵션입니다.

리다이렉트 체인은 스크래퍼를 중단시킵니다. 바이너리 응답은 텍스트로 디코딩될 때 손상됩니다. "페이지를 가져와서 HTML을 파싱하는" 단계를 지나면 끊임없이 발생하는 두 가지 문제입니다.

이 두 가지 문제를 모두 처리하기 위해 두 개의 새로운 요청 옵션인 followRedirectsreturnBuffer를 출시했습니다. 이 옵션들은 현재 API에 적용되어 있습니다.

작동 방식

followRedirects를 통한 리다이렉트 제어

대부분의 스크래핑 API는 리다이렉트를 부울 값으로 처리하여 따라가거나 따르지 않도록 합니다. 이는 루프가 발생하는 리다이렉트 체인에 도달하거나 트래킹 파라미터를 추출하기 위해 중간 302 응답 자체가 필요해질 때까지는 잘 작동합니다.

FourA의 followRedirects는 0에서 20 사이의 정수를 허용합니다. 이 값을 생략하거나 0으로 설정하면 헤더를 포함한 원시 리다이렉트 응답을 반환합니다. 5로 설정하면 요청이 최대 5개의 홉을 따라간 후 도달한 결과를 반환합니다.

curl -X POST "https://eu.api.foura.ai/v1/request" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/short-link",
    "followRedirects": 3,
    "unblocker": true
  }'

이 설정은 최대 세 번의 리다이렉트를 따릅니다. 체인이 두 번 만에 해결되면 최종 페이지를 얻습니다. 세 번보다 길면 세 번째 홉이 반환한 내용을 얻습니다.

이 차이는 생각보다 중요합니다. 이커머스 사이트는 제품 페이지에 도달하기 전에 트래킹 URL을 통해 리다이렉트합니다. 이러한 리다이렉트는 따라가야 합니다. 하지만 제휴 네트워크와 URL 단축 서비스는 때때로 6, 7, 8번의 홉까지 이어지는 체인을 생성합니다. 그리고 일부 리다이렉트 루프는 전혀 해결되지 않습니다. 특정 횟수로 제한하면 요청 타임아웃을 소모하는 무한 루프에 빠지지 않고 데이터를 수집할 수 있습니다.

이전에는 리다이렉트를 비활성화한 상태로 요청을 보내고, 수동으로 Location 헤더를 파싱한 다음, 다른 요청을 보내는 것이 해결책이었습니다. 이는 최소 두 번의 API 호출, 두 배의 지연 시간, 그리고 유지보수해야 할 코드를 의미합니다. 이제는 숫자 하나를 포함한 단일 호출로 가능합니다.

returnBuffer를 통한 원시 바이너리 응답

이미지, PDF 또는 protobuf 페이로드를 수집할 때 텍스트 디코딩은 데이터를 파괴합니다. HTTP 라이브러리는 응답을 텍스트로 가정하고, 문자셋 감지를 적용하며, 맞지 않는 모든 바이트를 조용히 훼손합니다. Protobuf는 읽을 수 없게 됩니다. 이미지 헤더가 깨집니다. 결국 손상된 파일을 얻게 되며 원인을 설명하는 명확한 오류 메시지도 없습니다.

returnBuffer는 API에 텍스트 디코딩을 완전히 건너뛰도록 지시합니다.

curl -X POST "https://eu.api.foura.ai/v1/request" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/product-image.jpg",
    "returnBuffer": true
  }'

응답 본문은 원시 바이트로 반환됩니다(JSON 응답에서는 base64로 인코딩됨). 클라이언트 측에서 디코딩하면 서버가 보낸 것과 정확히 동일한 데이터를 얻을 수 있습니다. 문자셋 가정이나 인코딩 변환, 조용한 데이터 손상이 없습니다.

이는 우리가 본 더 흔한 지원 티켓 중 하나였습니다(제품 이미지나 PDF 카탈로그를 수집하는 사용자가 열리지 않는 파일을 받는 문제). 해결책은 항상 같았지만 이제는 우회 방법 대신 플래그를 제공합니다.

영향

두 기능 모두 작업당 API 호출 수를 줄입니다. followRedirects는 수동으로 리다이렉트를 추적하는 루프를 제거합니다. returnBuffer는 "가져오고, 손상된 것을 확인하고, 다른 설정으로 다시 가져오는" 주기를 제거합니다.

리다이렉트가 많은 타겟(제휴 링크, URL 단축 서비스, 이커머스 트래킹 체인)의 경우, 초기 테스트에서 사용자가 수동 리다이렉트 처리에서 followRedirects로 전환했을 때 요청 수가 40-60% 감소한 것을 확인했습니다. 그리고 바이너리 수집 작업(제품 이미지, 문서 다운로드)에서 returnBuffer는 다단계 우회 방법을 단일 옵션으로 바꿉니다(초기 결과).

화려한 기능들은 아닙니다. 어떤 사이트가 결제 과정에 추가 리다이렉트 홉을 넣어 새벽 3시에 스크래퍼가 멈출 때까지 생각조차 하지 않는 종류의 기능들입니다.

파워 유저를 위한 정보

리다이렉트 체인을 정밀하게 제어하려면 followRedirects와 응답 유효성 검사를 결합하십시오. 리다이렉트를 따르되 최종 목적지가 장벽에 부딪히면 요청을 실패 처리할 수 있습니다.

curl -X POST "https://eu.api.foura.ai/v1/request" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/product/12345",
    "followRedirects": 5,
    "unblocker": true,
    "validate": {
      "status": { "fail": [403, 503] },
      "data": { "fail": ["Access Denied", "captcha"] }
    }
  }'

이 요청은 최대 5번의 리다이렉트를 따른 다음 최종 응답을 확인합니다. 사이트가 CAPTCHA 페이지나 접근 거부 장벽으로 리다이렉트하는 경우 요청이 깔끔하게 실패합니다. 다운스트림에서 필터링해야 할 가비지 데이터가 발생하지 않습니다.

바이너리 수집의 경우, 대용량 파일을 다운로드하기 전에 콘텐츠 타입을 확인해야 할 때 returnBuffer를 HEAD 요청과 함께 사용하십시오. FourA는 HEAD 요청을 올바르게 처리하므로 본문을 가져오지 않고도 헤더를 검사할 수 있습니다. Content-Type을 확인하고 다운로드할 가치가 있는지 결정한 다음, returnBuffer: true를 사용하여 전체 요청을 보냅니다.

그리고 JavaScript가 많은 타겟을 위해 브라우저 작업을 사용하는 경우, 이러한 옵션은 다이렉트 HTTP 엔진에만 적용된다는 점에 유의하십시오. 브라우저 요청은 제한 없이 기본적으로 따르도록 설정된 브라우저의 내장 내비게이션을 통해 리다이렉트를 처리합니다.

향후 계획

맞춤형 DNS 확인, 단계별 타임아웃 조정 및 인증서 처리 옵션과 같은 더 많은 요청 수준 제어 기능을 API를 통해 노출하는 작업을 진행 중입니다. 인프라 오버헤드 없이 깔끔한 REST 인터페이스를 통해 언블로커의 모든 기능을 제공하는 것이 목표입니다.

필요한 특정 옵션이 있다면 의견을 기다리겠습니다. 대시보드는 이미 이러한 새로운 옵션으로 요청이 어떻게 수행되는지 보여주므로 그 차이를 직접 측정할 수 있습니다.