주요 내용
대상 사이트의 거부인지, 플랜 제한 때문인지 명확해집니다. 플랜 제한으로 거부된 모든 request는 이제 단일 header로 원인을 반환하며, Auto와 Playground에서도 해당 응답을 확인할 수 있습니다. proxy 포트는 키 기준 타겟팅 기억 기능을 지원하며, 상호작용 페이지를 포함한 Browser 렌더링이 Free를 포함한 모든 플랜에 기본 제공됩니다.
새로운 기능
거부 주체를 명시하는 응답
플랜 제한으로 인해 request가 거부되면, response에는 원인을 나타내는 X-FourA-Limit header(plan_limit_credits, plan_limit_rate, plan_limit_browser_daily 및 기타 4종)가 포함됩니다. 본문에는 적용 중인 한도 수치와 함께 reason 아래에 해당 코드가 표시됩니다. 공용 플랫폼 제한 시에는 이 header가 설정되지 않으므로, header의 존재 여부만으로 FourA 시스템 부하가 아닌 계정 관련 거부임을 바로 확인할 수 있습니다.
import requests
r = requests.post(
"https://api.foura.ai/api/single",
headers={"X-API-Key": "pk_live_..."},
json={"url": "https://example.com/data"},
)
limit = r.headers.get("X-FourA-Limit")
if limit:
print("my plan stopped this:", limit, r.json()["error"])
이제 계정의 모든 제한은 이용 중인 플랜에 따라 결정되며, 사용량 및 제한 페이지에 이번 주기 사용 현황과 함께 각 항목이 표시됩니다. rate limits 참조 문서에서 7가지 코드 전체와 짧은 대기 후 해제되는 코드를 확인할 수 있습니다.
Auto는 동일한 코드를 읽고 그에 따라 작동합니다. 특정 단계가 차단되는 제한(예: 일일 브라우저 허용량)이 발생해도 나머지 단계는 계속 작동하며, 이미 시도한 출구 노드는 플랜 제한으로 인한 거부의 원인으로 처리되지 않습니다. 크레딧, 대역폭 부족 또는 플랜에 포함되지 않은 제품 사용 등 계정 자체의 리소스 소진을 의미하는 제한이 발생하면, 다른 경로를 시도하지 않고 즉시 실행을 중단하여 거부 사유를 반환합니다. 이는 Auto의 목적을 바꾸지 않습니다. Auto가 작동하는 단계를 찾도록 한 다음, 반환된 세션을 /api/single 또는 /api/browser에서 재생하여 트래픽을 집중시키면 됩니다.
Playground에서는 이를 텍스트로 명확히 표시합니다. 응답 상단 라인에는 해당 호스트에 대해 이미 유지 중이던 세션, 일반 request, 회전 proxy, 실제 브라우저 중 무엇이 페이지를 처리했는지와 challenge 해결 여부, 성공한 시도 회차 및 발생 비용이 표시됩니다. 플랜 제한으로 인해 request가 중단된 경우, 해당 라인은 "Stopped by your plan, not by the site"로 시작하며 해당 제한 항목을 명시합니다.
프록시 포트 베타
프록시 포트를 사용하면 proxy URL을 지원하는 모든 클라이언트가 API 호출 없이 당사 출구 노드를 통해 트래픽을 전송할 수 있습니다. 현재 베타 상태입니다. 이를 통한 트래픽은 아직 과금되지 않으며, 가동 시간 보장이 적용되지 않고, 옵션 이름은 향후 변경될 수 있습니다.
이번 주 업데이트를 통해 선택 옵션이 더 명확해졌습니다. 플랜에 기본 포함된 자체 출구 노드인 공유 네트워크와, 플랜의 프리미엄 트래픽을 사용하는 주거용 IP인 주거용 네트워크 중 선택할 수 있습니다. 공유 네트워크에서 request를 처리할 수 없을 때 주거용 네트워크로 폴백하는 기능은 별도 스위치로 제공되며 기본값은 비활성화 상태입니다. 기본 활성화 시 사용자의 허용량이 임의로 소진될 수 있기 때문입니다.
이제 타겟팅 설정이 자격 증명에 저장됩니다. proxy 사용자 계정에 국가, 지역, 도시 또는 디바이스를 저장하면 해당 계정으로 연결되는 모든 세션에 동일하게 적용됩니다. 이에 따라 연결 문자열은 기본 자격 증명과 변경 사항만 포함하도록 단순화됩니다. 다만 개별 연결에서는 username에 직접 지정한 값이 항상 우선하며, any를 통해 저장된 값을 덮어쓸 수 있습니다. 예를 들어 특정 도시가 저장된 키에서 -city-any을 지정하면 국가 전체를 대상으로 요청합니다.
주소별로 브라우저 프로필을 실행해야 하나요? 필요한 고정 주소 수를 설정하면 각 세션 이름이 포함된 라인이 목록으로 표시됩니다. 기존 이름이 대상 사이트에서 차단되었을 때 New names를 사용하면 새 세트를 바로 생성할 수 있으며, 목록은 URL 형태나 대부분의 proxy 관리 프로그램에서 가져올 수 있는 형식인 host:port:user:pass 형태로 제공됩니다. 전체 username 문법은 proxy port 문서에서 확인할 수 있습니다.
모든 플랜에서 방어 페이지 지원
브라우저 렌더링 및 대화형 페이지 처리는 Free 플랜을 포함한 모든 플랜에 기본 제공되며, 제한 한도만 다릅니다. Free 및 Developer 플랜에도 프리미엄 출구 트래픽이 일부 포함되어 있어, 결제하기 전에 방어된 페이지가 사용자의 URL로 정상 반환되는지 직접 확인할 수 있습니다.
Proxy Finder의 프리미엄 출구는 대상 사이트를 구분하지 않도록 변경되었습니다. 어떤 대상이든 exitClass: premium를 전달하면 플랜의 프리미엄 트래픽(및 잔여량)만으로 적용 여부가 결정됩니다.
입력된 정보를 정확히 반영하는 결제 시스템
Billing Details에 저장한 회사명, VAT 번호, 국가는 청구서에 그대로 인쇄되며 체크아웃 및 매 갱신 시 VAT 처리 방식을 결정합니다. 결제 양식에 다른 정보를 입력하면 해당 1회 결제에 한해 해당 필드만 덮어씁니다.
계약 체결을 통해 별도 플랜을 배정받은 경우, 이제 Plan & Usage 페이지에 Confirm 버튼과 함께 해당 플랜이 표시됩니다. 월간 또는 연간을 선택하고 카드를 등록하면 일할 계산 없이 전체 기간 금액이 선불로 결제됩니다.
Plan & Usage의 크레딧 카드 옆에 대역폭과 프리미엄 트래픽을 위한 두 개의 신규 카드가 추가되어, 플랜 기본 제공량과 추가 구매량을 합산한 전체 한도 대비 사용량을 보여줍니다. 해당 유형의 충전 상품이 판매 중일 때는 사용량을 늘려주는 해당 카드에 Buy 버튼이 표시됩니다. 자세한 내용은 결제 가이드에서 다룹니다.
내부 구현 세부사항
분당 rate limit은 해당 1분 동안 전송된 트래픽을 다음 분으로 넘어가기 직전까지 정확하게 계산합니다. 대시보드 테이블은 노트북 화면에 최적화되어 있으며, 모바일에서는 폭이 넓은 테이블이 자체 프레임 안에서 가로로 스크롤됩니다. 블로그 테이블 역시 좁은 화면에서 동일하게 스크롤됩니다. 조직 페이지는 열리는 즉시 대기 중인 초대 목록을 표시합니다.
원인을 명확히 파악할 수 있는 거절 응답이어야 대응 계획을 세울 수 있습니다. 다음번에 작업이 중단되면 단 하나의 header를 통해 1초를 기다려야 하는지, UTC 자정까지 기다려야 하는지, 아니면 플랜을 확인해야 하는지 바로 확인할 수 있습니다.