새로운 기능
/api/auto 엔드포인트는 이제 모든 URL에 대해 유효한 응답을 얻는 가장 빠른 경로입니다. 타깃 URL만 지정하면 됩니다. Auto가 요청을 Single, Proxy Finder, Browser 중 어디로 전달할지 직접 선택하고, 봇 방지 챌린지에 직면하면 이를 해결하며, 다음 호출에서 재사용할 수 있는 세션을 반환합니다.
단 하나의 엔드포인트로 모든 타깃을 처리합니다. 클라이언트 측 모드 전환이 필요 없습니다.
이것이 핵심입니다. 본문의 나머지 부분에서는 작동 방식, 비용, 그리고 주의해야 할 점을 설명합니다.
작동 방식
Auto 내부에는 단계별 계층(저비용 우선, 고비용 후순위)이 구성되어 있습니다. 매 요청마다 Auto는 validate 규칙을 통과하는 응답이 나올 때까지 단계를 순차적으로 실행합니다.
단계별 순서는 다음과 같습니다.
- Cached session. 이전 호출에서 생성된 해당 호스트의 웜 세션이 있으면 이를 먼저 재사용합니다. 가장 저렴한 경로입니다.
- Proxy Finder. 로테이션 proxy 요청입니다. 주로 IP 평판 기반으로 보호되는 사이트에 적합합니다.
- Browser. JavaScript를 실행하고, 봇 방지 챌린지를 해결하며, 사이트에서 발급한 cookie를 수집하는 풀 렌더링 방식입니다.
특정 단계에서 성공하면 Auto는 확보된 세션 정보(사용된 proxy id, 사이트에서 발급한 cookie, User-Agent)를 저장합니다. 동일한 호스트로 들어오는 다음 호출에서 Auto는 이 세션을 먼저 시도합니다. 세션이 여전히 유효하다면 고비용 단계 대신 저비용 단계의 비용만 청구됩니다.
최소 호출 예시:
curl -X POST "https://api.foura.ai/api/auto" \
-H "X-API-Key: pk_live_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/data",
"validate": { "status": { "accept": [200] } }
}'
요약된 response:
{
"status": 200,
"data": "...",
"headers": [...],
"meta": {
"rung": "cache",
"solved": false,
"attempts": 1,
"credits": 2
},
"session": {
"proxy": "CLN1B8",
"cookies": [{ "name": "cf_clearance", "value": "..." }],
"userAgent": "..."
}
}
이후 구현에 중요한 두 가지 필드가 있습니다. meta.rung 필드는 어떤 경로가 성공했는지 알려줍니다. session 필드는 동일한 출구를 직접 재생하기 위해 /api/single 호출에 전달할 수 있는 삼중값입니다. proxy 필드는 불투명한 base36 ID(원시 IP 없음)로, 로깅하거나 시스템 간에 전달하기에 안전합니다.
영향
여기서 중요한 두 가지 수치가 있습니다.
보호된 사이트에 대한 첫 번째 호출은 Browser 단계를 실행합니다. 렌더링하고, 해결하고, cookie를 수집하여 페이지를 전달합니다. 이는 약 10 크레딧입니다. Auto가 해당 호스트에 대해 작동하는 세션을 캐시하면 이후 호출은 이를 재생합니다. Single을 통해 2 크레딧으로 실행되거나, 세션의 cookie가 모든 주소에서 작동할 때는 Proxy Finder를 통해 4 크레딧으로 실행됩니다. 따라서 두 번째 호출은 첫 번째 호출보다 최대 5배 저렴하며, 세션이 유지되는 한 이후의 모든 호출은 저렴한 요율로 유지됩니다. 배포 중 프로덕션 환경에서 이를 측정한 결과, 쿠키가 없는 출구는 (한 번 찾으면) 모든 요청이 Proxy Finder를 통과할 때 들었던 10 크레딧 대신 호출당 정확히 2 크레딧으로 재생됩니다.
두 번째 수치: 실패한 단계는 과금되지 않습니다. Auto가 세 개의 proxy를 시도하고 네 번째가 전달되기 전에 각각 403을 반환하는 경우, 네 번째의 크레딧만 청구됩니다. 탐색이 아닌 전달된 콘텐츠에 대해서만 비용을 지불합니다.
이것이 핵심 가치입니다. 비용이 많이 드는 단계는 한 번만 실행되고 저렴한 단계는 그 이후로 계속 실행되며, 캐싱 로직을 직접 작성할 필요가 없습니다.
실제 프로덕션 문제를 해결하는 다른 두 가지 동작도 주목할 가치가 있습니다.
지리적으로 제한된 대상이 출구를 낭비하지 않습니다. 사이트가 대부분의 출구에 대해 451(또는 법적 차단 인터스티셜)을 반환하면, Auto는 실제로 콘텐츠를 전달한 국가를 학습합니다. 다음 호출에서는 해당 국가의 최신 출구를 먼저 가져오고 동시 로드를 여러 국가에 분산합니다. 따라서 운 좋게 성공한 단일 출구에 트래픽이 몰려 rate limit에 걸리지 않습니다.
모든 단계에서 Validate가 실행됩니다. 잘못된 콘텐츠 페이지(본문에 법적 고지가 포함되어 status 200을 반환하는 지역 차단)는 절대로 성공으로 계산되지 않습니다. validate.data.fail 필드에 "legal reasons"가 명시되어 있다면, Auto는 한 단계가 이를 통과할 때까지 계속 시도합니다. 캐시된 단계도 예외가 아닙니다. 어떤 단계도 예외가 아닙니다. 통과하는 것이 없으면 실제 원인이 포함된 실패 결과를 솔직하게 반환합니다.
고급 사용자를 위한 설정
Auto를 통해 대량의 트래픽을 처리할 때 중요한 몇 가지 설정값입니다.
timeout_ms 옵션은 단계별 예산이 아닌 전체 작업 예산입니다. 기본값은 120초입니다. Auto는 이를 분할합니다. 모든 하위 호출은 min(자체 기본 타임아웃, 남은 예산)을 할당받으며, 남은 시간이 너무 적으면 사다리 구조에서 새 단계를 실행하지 않습니다. 대화형 지연 시간 작업에는 20,000으로 설정하세요. 긴 꼬리 지연을 허용하는 대량 크롤링에는 기본값을 유지하세요.
forceProxy 옵션은 기본적으로 활성화되어 있습니다. Auto는 forceProxy: false 설정을 지정하지 않는 한 FourA의 원본 IP에서 대상을 직접 호출하지 않습니다. 한 가지 주의할 점은 일부 사이트(IP 신뢰도 게이팅이 적용된 대화형 Cloudflare)의 경우 신뢰도가 낮은 주거용 출구보다 깨끗한 데이터 센터 IP에서 더 잘 작동한다는 것입니다. 따라서 forceProxy: false 설정을 사용하면 특정 대상을 더 쉽게 처리할 수 있습니다. 특정 호스트에서 반복적인 챌린지가 발생하는 경우 이 설정을 꺼보는 것이 좋습니다.
ignoreProxies은 클라이언트 측 차단 목록(avoid-list)입니다. 사용 불가 상태로 확인된 proxy id(사용자 측에서 rate limit이 발생했던 이전 session.proxy 기준)를 전달하면, Auto는 웜 세션 재사용, exit 검색, Proxy Finder 서브 호출 등 모든 단계에서 해당 프록시를 제외합니다. 따라서 Auto는 방금 제외하도록 지정한 exit을 다시 선택하지 않습니다.
meta를 활용하여 자체 대시보드를 구축할 수도 있습니다. 오늘 브라우저 단계까지 도달한 호스트, 전송당 평균 시도 횟수, 챌린지가 해결된 요청과 정상 요청의 비율 등을 모니터링할 수 있습니다. 특정 호스트의 비용이 갑자기 2크레딧에서 10크레딧으로 증가한다면, 이는 청구 금액이 늘어나기 전에 조치할 수 있는 세션 성능 저하 신호입니다.
네 가지 요소를 모두 구성한 예시입니다.
import requests
r = requests.post(
"https://api.foura.ai/api/auto",
headers={"X-API-Key": "pk_live_..."},
json={
"url": "https://example.com/product/9876",
"timeout_ms": 30000,
"forceProxy": True,
"ignoreProxies": ["CLN1B8", "K7X9AB"],
"validate": {
"status": {"accept": [200]},
"data": {"accept": ['"price":'], "fail": ["captcha", "legal reasons"]}
}
}
).json()
# If Auto delivered, keep the session for the next call to this host
if r.get("status") == 200 and "session" in r:
session = r["session"] # {proxy, cookies, userAgent}
print(r["meta"]["rung"], r["meta"]["credits"], r["meta"]["attempts"])
validate 스키마 자체에 대한 내용은 성공 기준을 결정하는 유효성 검사 규칙의 이전 가이드를 참고하십시오.
향후 계획
현재 Auto 로드맵에는 두 가지 항목이 예정되어 있습니다.
다음으로 Dashboard에 세션 검사 기능이 추가됩니다. 현재 Auto가 호스트별로 유지하는 세션은 서비스 내부에만 존재하므로, 클라이언트 측에서 크레딧 소진 문제를 디버깅할 때 확인할 방법이 없습니다. 이에 따라 캐시된 세션, 세션의 생성 시간, 잔여 유효 기간, 각 세션의 단계 이력을 확인할 수 있는 호스트별 세션 뷰를 구축하고 있습니다. 또한 타깃 대상이 변경되어 캐시가 유효하지 않음을 인지했을 때 수동으로 세션을 삭제할 수 있는 버튼도 추가됩니다.
그 이후에는 더 엄격한 비용 제어 기능을 제공할 예정입니다. request당 엄격한 크레딧 한도 설정(해당 호출에서 X를 초과해 소비하지 않으며, 초과 시 즉각 실패 처리) 및 브라우저 단계가 필요 없는 대상을 위한 "single-only" 모드가 포함됩니다. 두 기능 모두 현재 플래그 뒤에 배포되어 있습니다.
Auto의 핵심은 어떤 제품을 호출해야 할지 고민하지 않도록 하는 데 있습니다. 그렇다고 해서 발생한 동작을 검사할 수 없다는 의미는 아닙니다. 모든 response는 거쳐간 단계와 빌드된 세션 정보를 함께 전달합니다. 이 두 필드를 확인하면 호출 비용이 왜 그렇게 청구되었는지 정확히 파악할 수 있습니다.