새로운 기능
/api/auto endpoint는 이제 모든 URL에 대해 정상 작동하는 response를 얻는 가장 빠른 경로입니다. 대상 URL을 지정하기만 하면 됩니다. Auto가 Single, Proxy Finder, Browser 중 어떤 방식으로 request를 실행할지 자동으로 선택하고, 페이지 보안 검사를 만나면 이를 처리하며, 다음 호출에서 재사용할 수 있는 session을 반환합니다.
하나의 endpoint. 모든 대상. 사용자 측의 모드 전환은 필요 없습니다.
이것이 핵심입니다. 이 글의 나머지 부분에서는 작동 방식, 비용, 그리고 주의해야 할 점을 다룹니다.
작동 방식
Auto 내부에는 단계별 사다리(저비용 우선, 고비용 후순위)가 구성되어 있습니다. 모든 request마다 Auto는 validate 규칙을 통과하는 response가 나올 때까지 사다리를 한 단계씩 올라갑니다.
단계별 순서는 다음과 같습니다.
- 캐시된 session. 이전 호출을 통해 해당 host에 대한 웜 session이 남아 있다면, 먼저 이를 통해 재생합니다. 가장 저렴한 경로입니다.
- Proxy Finder. 순환 proxy request입니다. 주로 IP 평판 기반으로 보호되는 사이트에 적합합니다.
- Browser. JavaScript를 실행하고 페이지의 검증 절차를 완료하며 사이트가 발급한 cookie를 수집하는 완전한 렌더링 방식입니다.
특정 단계에서 성공하면 Auto는 확인된 session 정보(사용된 proxy id, 사이트가 발급한 cookie, User-Agent)를 저장합니다. 동일한 host로 다음 호출이 들어오면 Auto는 이 session을 먼저 시도합니다. 여전히 유효하다면 고비용 단계가 아닌 저비용 단계의 비용만 청구됩니다.
최소 호출 예시:
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 필드는 동일한 exit를 직접 재생하기 위해 /api/single 호출에 전달할 수 있는 세 가지 값의 조합입니다. proxy 필드는 불투명한 base36 ID(원시 IP 없음)이므로 로깅하기에 안전하고 시스템 간에 전달하기에도 안전합니다.
영향
여기서 중요한 숫자는 두 가지입니다.
보호된 사이트에 대한 첫 번째 호출은 Browser 단계를 실행합니다. 렌더링하고, 해결하고, cookie를 수집하여 페이지를 전달합니다. 이는 약 10 credit입니다. Auto가 해당 호스트에 대해 작동하는 세션을 캐시하면, 이후 호출은 이를 재생합니다. Single을 통해 2 credit으로 실행되거나, 세션의 cookie가 어떤 주소에서든 작동하는 경우 Proxy Finder를 통해 4 credit으로 실행됩니다. 따라서 두 번째 호출은 첫 번째 호출보다 최대 5배 저렴하며, 세션이 유지되는 한 그 이후의 모든 호출도 저렴한 요율로 유지됩니다. 롤아웃 중에 프로덕션에서 이를 측정한 결과, cookie가 없는 exit는 (한 번 발견되면) 모든 request가 Proxy Finder를 통과할 때 들었던 10 credit 대신 호출당 정확히 2 credit으로 재생됩니다.
두 번째 숫자는 실패한 단계에는 비용이 청구되지 않는다는 점입니다. Auto가 프록시 세 개를 시도하여 네 번째 프록시가 콘텐츠를 전달하기 전에 각각 403을 반환하더라도, 네 번째 프록시의 credit만 계산됩니다. 검색 비용이 아니라 전달된 콘텐츠에 대해서만 비용을 지불합니다.
이것이 핵심 가치입니다. 비용이 많이 드는 단계는 한 번만 실행되고, 그 이후에는 저렴한 단계가 계속 실행되며, 캐싱 로직을 직접 작성할 필요가 없습니다.
실제 프로덕션 문제를 해결하므로 주목할 만한 두 가지 다른 동작이 있습니다.
Geo-fenced 타깃이 exit를 낭비하지 않습니다. 사이트가 대부분의 exit에 대해 451(또는 법적 차단 중간 페이지)을 반환하는 경우, Auto는 실제로 콘텐츠를 전달한 국가를 학습합니다. 다음 호출에서는 해당 국가의 최신 exit를 먼저 가져오고 동시 로드를 이들 사이에 분산합니다. 따라서 운 좋게 걸린 단일 exit에 트래픽이 몰려 rate limit이 걸리지 않습니다.
Validate는 모든 단계에서 실행됩니다. 잘못된 콘텐츠 페이지(본문에 법적 고지가 포함되어 상태 200을 반환하는 국가 제한)는 절대 적중으로 처리되지 않습니다. validate.data.fail에 "legal reasons"가 지정된 경우, Auto는 한 단계가 이를 통과할 때까지 계속 작업을 수행합니다. 캐시된 단계도, 어떤 단계도 예외는 아닙니다. 아무것도 통과하지 못하면 실제 원인이 포함된 실패 결과를 투명하게 받게 됩니다.
고급 사용자를 위한 팁
Auto를 통해 대량의 트래픽을 처리할 때 중요한 몇 가지 설정입니다.
timeout_ms은(는) 각 단계별 예산이 아니라 전체 작업 예산입니다. 기본값은 120초입니다. Auto는 이를 분할합니다. 모든 하위 호출은 min(자체 기본 타임아웃, 남은 예산)을 할당받으며, 남은 시간이 너무 적으면 래더는 새 단계 실행을 중단합니다. 대화형 지연 시간 작업의 경우 20,000으로 설정하십시오. 더 긴 tail latency를 허용하는 대량 크롤링의 경우 기본값을 유지하십시오.
forceProxy은(는) 기본적으로 활성화되어 있습니다. forceProxy: false을(를) 설정하지 않는 한 Auto는 FourA의 origin IP에서 타깃에 직접 접근하지 않습니다. 한 가지 주의할 점은 일부 사이트(IP 신뢰도 게이팅이 적용된 대화형 Cloudflare)는 신뢰도가 낮은 residential exit보다 깨끗한 데이터 센터 IP에서 실제로 더 잘 작동한다는 것입니다. 따라서 forceProxy: false을(를) 사용하면 특정 타깃을 더 어렵게 만드는 것이 아니라 더 쉽게 만들 수 있습니다. 특정 호스트에서 반복적인 챌린지가 발생하는 경우 이 설정을 해제해 볼 가치가 있습니다.
ignoreProxies는 클라이언트 측 회피 목록(avoid-list)입니다. 사용 불가 상태로 확인된 proxy id(사용자 측에서 rate limit이 발생했던 이전 session.proxy 기반)를 전달하면, Auto는 웜 세션 재사용, 출구 검색, Proxy Finder 하위 호출을 포함한 모든 위치에서 해당 ID를 건너뜁니다. 즉, Auto는 방금 회피하도록 지정한 출구를 다시 선택하지 않습니다.
meta를 기반으로 자체 대시보드를 구축할 수도 있습니다. 오늘 브라우저 단계까지 도달한 호스트, 전달당 평균 시도 횟수, 정상 요청 대비 challenge 해결 fetch 비율 등을 확인할 수 있습니다. 특정 호스트의 크레딧이 갑자기 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 스키마 자체에 대한 내용은 이전 가이드인 Validate Rules Now Decide What Counts as Success를 참고하십시오.
향후 계획
현재 Auto 로드맵에는 두 가지 항목이 예정되어 있습니다.
다음으로 세션 검사 기능이 Dashboard에 추가됩니다. 현재 Auto가 호스트별로 유지하는 세션은 서비스 내부에 저장되며, 클라이언트 측에서 과도한 비용 소모를 디버깅할 때 확인할 수 있는 수단이 없습니다. 캐시된 세션, 세션 수명, 남은 유지 시간 및 각 세션별 단계(rung) 이력을 확인할 수 있는 호스트별 세션 뷰를 구축하고 있습니다. 대상 사이트의 사양이 변경되어 캐시가 유효하지 않음을 확인했을 때 세션을 수동으로 삭제하는 버튼도 추가됩니다.
그 이후에는 더 엄격한 비용 제어 기능을 제공할 예정입니다. request당 엄격한 크레딧 상한 설정(이 호출에서 X를 초과해 지출하지 않으며 초과 시 즉각 실패 처리)과 브라우저 단계가 필요 없는 타깃을 위한 "single-only" 모드가 추가됩니다. 두 기능 모두 현재 플래그 뒤에서 테스트 중입니다.
Auto의 목적은 어떤 제품을 호출할지 고민하지 않도록 하는 것입니다. 그렇다고 해서 발생한 동작을 검사할 수 없다는 의미는 아닙니다. 모든 response는 실행된 rung과 생성된 세션 정보를 함께 전달합니다. 이 두 필드를 확인하면 호출 비용이 그렇게 발생한 이유를 정확히 파악할 수 있습니다.