주요 내용
서버 한 대가 중단되더라도 다음 request는 다른 서버로 자동 전달됩니다. 이제 API, proxy 포트, MCP 서버, 로그인 및 웹사이트도 대기 서버에서 함께 실행되며, 트래픽이 자동으로 전환됩니다. 또한 rate limit 초과 정책이 개선되어 일시적으로 한도를 넘겨도 허용량까지는 정상 처리되고 초과분만 거부됩니다.
변경 사항
모든 서비스에 대기 서버 적용
메인 서버의 응답이 중단되어도 클라이언트 측의 설정 변경 없이 트래픽이 대기 서버로 전환됩니다. API key, 호스트, proxy 사용자 계정 모두 기존과 동일하게 유지됩니다.
요청을 즉시 처리할 수 없는 서버에 도달한 request는 에러를 반환하는 대신 처리 가능한 서버로 전달됩니다. 이 과정에서 다른 정상 서버의 호출 속도가 저하되지 않습니다.
일시 차단 대신 초과분만 제한하는 Rate limit
Single 또는 Proxy Finder에서 플랜의 분당 허용량을 소폭 초과하더라도 허용량만큼은 정상 처리되며, 초과분만 거부됩니다. 거부된 request는 더 이상 분당 사용량에 합산되지 않기 때문입니다. 다음 요청이 허용되는 시점은 Retry-After 헤더로 전달됩니다.
과도한 재시도가 발생하면 일시 대기 상태로 전환됩니다. 1분 내 거부 횟수가 허용량의 2배를 초과하면 cooldown: true 상태와 함께 30초 대기 응답이 반환됩니다. 이 대기 시간 동안의 거부 요청은 사용량에 집계되지 않으므로, 클라이언트가 재시도를 계속하더라도 대기 시간이 끝나면 자동으로 정상화됩니다. 새로운 proxy 포트 연결에도 동일한 규칙이 적용되어, 터널링에 성공하지 못한 연결은 분당 사용량에 포함되지 않습니다.
import time
import requests
def single(url, key, tries=5):
for _ in range(tries):
r = requests.post(
"https://api.foura.ai/api/single",
headers={"X-API-Key": key},
json={"url": url},
)
if r.headers.get("X-FourA-Limit") != "plan_limit_rate":
return r
# same header on the 30-second pause; the body adds "cooldown": true
time.sleep(int(r.headers.get("Retry-After", "1")))
return r
모든 필드는 rate limits page에 나와 있습니다.
Auto가 모든 요청을 거부하는 사이트에서 더 일찍 중단됩니다
Browser를 포함하여 Auto가 시도하는 모든 출구를 사이트가 거부하는 경우, 이제 전체 예산을 소진하는 대신 몇 번의 시도 후 호출이 종료됩니다. Proxy Finder가 이전에 처리한 적이 있는 사이트의 경우, Auto는 먼저 사용자의 validate 규칙에 따라 Proxy Finder에 페이지를 요청하며, 결과가 비어 있으면 해당 검색 비용은 청구되지 않습니다.
두 가지 변경 사항을 통해 Auto가 지정된 예산 내에서 유지되도록 했습니다. 사용 중인 세션이나 동일한 사이트에서 이미 처리 중인 다른 request를 기다리는 호출은 이제 timeout_ms 내에서 time budget exhausted 오류와 함께 종료되므로, 재시도하거나 예산을 늘릴 수 있습니다(자세한 내용은 common issues 참조). 또한 JSON 페이지는 어떤 경로로 가져왔든 data에 텍스트 형태로 반환되므로 하나의 파서로 모든 호출을 처리할 수 있습니다.
이 중 어느 것도 Auto의 본래 목적을 바꾸지 않습니다. Auto는 경로를 찾습니다. 경로를 찾은 후에는 반환된 session를 /api/single 또는 /api/browser에서 재생하고 대량 트래픽을 해당 위치로 전달하십시오.
한 단계가 더 필요한 페이지
Browser는 이제 스크립트를 실행한 후 실제 콘텐츠로 새로고침되는 짧은 대기 페이지 유형을 한 가지 더 기다려 처리하고, 그 결과 페이지를 반환합니다. Auto는 동일한 출구에서 이러한 페이지를 Browser로 전달하므로 호출이 사이트의 실제 콘텐츠와 함께 종료됩니다.
일부 Amazon 제품 페이지는 처음에 "Continue shopping" 클릭을 요구합니다. Single 및 Browser는 이제 동일한 출구에서 해당 버튼을 누르고 제품 페이지를 반환합니다. Proxy Finder 및 Auto를 통한 호출에도 동일하게 적용됩니다.
Browser는 또한 로드 후 다른 주소로 리디렉션되는 페이지를 타임아웃까지 기다리는 대신 그대로 추적합니다. 반환하는 __Secure- 또는 __Host- 이름의 cookie는 접두사에 필요한 속성을 부여받아, 페이지에서 저장된 전체 세션을 인식할 수 있습니다.
Proxy Finder 및 두 가지 명확해진 오류
Proxy Finder를 통한 일반 HTTP request는 이제 HTTPS와 동일하게 사이트에 직접 연결을 먼저 엽니다. 자체 페이지로 응답하거나 관련 없는 사이트에 동일한 body를 전달하는 proxy는 건너뛰고 request가 다음 proxy로 넘어갑니다.
확인할 수 없는 호스트 이름을 가진 자체 proxy URL을 Single 또는 Browser에 전달하면, 대상 사이트와 마찬가지로 호스트 이름이 명시된 오류와 함께 status 0이 반환됩니다. api.foura.ai 또는 eu.api.foura.ai 자체를 대상으로 하는 request는 데이터를 가져오거나 요금을 청구하기 전에 즉시 400을 받습니다. 이 오류는 일반적인 원인, 즉 페이지 URL 대신 API URL을 기준으로 링크가 확인되었음을 나타냅니다.
Dashboard, 가입 및 결제
- foura.ai에서 시작한 회원가입 절차가 이제 Dashboard로 바로 연결됩니다. Overview 화면에서 첫 결과 확인까지의 단계를 안내합니다. API key를 생성한 다음 터미널이나 Playground에서 request를 전송하면 됩니다. 모바일 환경에서는 Playground에서 단계가 시작되며, proxy port는 proxy user를 기반으로 한 별도 안내 단계를 거칩니다.
- 모바일 기기나 좁은 창 환경에서는 Playground에서 response가 수신되는 즉시 해당 위치로 자동 스크롤됩니다.
- Usage by Domain 및 by Client IP는 전체 기간의 모든 행을 먼저 정렬한 뒤 페이지를 분할하므로, 첫 페이지에서 실제 최상위 항목을 바로 확인할 수 있습니다.
- Overview 카드는 로딩 중에도 선택한 기간을 반영하며, 기간 선택 대화상자는 현재 보고 있는 기간을 기본으로 표시합니다. 사이드바의 Tools 아래에는 Docs 링크가 추가되었습니다.
- 수동으로 발행한 인보이스도 자동 발행 건과 함께 Billing page에 표시됩니다. EU VAT가 적용된 인보이스에는 사전 공지된 변경 사항을 포함해 판매 당일 유효한 세율이 적용됩니다.
각 변경 사항의 세부 내용은 updates.foura.ai에서 확인할 수 있습니다.
Under the Hood
proxy port는 열려 있는 터널의 실시간 수를 유지하며, 인스턴스 재시작 등으로 종료된 터널은 몇 초 내에 카운트에서 제외됩니다. 따라서 플랜에서 허용하는 concurrency를 온전히 활용할 수 있습니다.
가장 이상적인 장애 복구(failover)는 정기 요약 보고서에서나 확인하게 되는 복구입니다.