Anti-Bot 방어

타겟이 요청한 페이지로 가는 도중 봇 검사를 실행하면 FourA가 이를 알려줍니다. 봇 검사를 만난 모든 request는 시스템 이름, 검사 통과 여부, 그리고 (통과 시) 다음 호출에서 검사를 건너뛸 수 있도록 재사용 가능한 통과 정보를 포함하는 필드와 함께 반환됩니다.

이 페이지는 해당 필드에 대한 레퍼런스입니다. 전략에 대해서는 안티 봇 보호 처리를 참조하십시오.

필드 위치

Endpoint Field 표시 조건
POST /api/single/ defense (객체) response에서 봇 검사가 인식된 경우
POST /api/proxy/ defense (객체) 동일하며, 응답을 처리한 시도에서 보고됨
POST /api/browser/ defenseSolved (부울) 및 defenses (객체) 페이지 로드 중 봇 검사가 인식된 경우
POST /api/auto/ meta.solved (부울) 항상. 사다리의 어딘가에서 검사가 통과된 경우 true입니다.

필드가 없다는 것은 아무것도 인식되지 않았음을 의미합니다. 누락된 defense을 실패로 간주하지 마십시오.

보고하려면 기본적으로 활성화되어 있는 unblocker가 필요합니다. unblocker: false를 사용하면 수신된 그대로의 페이지를 요청한 것이므로, Single은 챌린지를 변경 없이 반환하고 Browser는 이를 해결하지 않고 렌더링합니다.

Single 및 Proxy의 defense

{
  "status": 200,
  "data": "<!doctype html>...",
  "total_time": 3.61,
  "defense": {
    "vendor": "sgcaptcha",
    "solved": true,
    "present": ["sgcaptcha"],
    "ms": 3412,
    "hashes": 1048576,
    "complexity": 20,
    "cookie": "_I_=<clearance>"
  }
}
필드 유형 설명
vendor string 이 레코드가 참조하는 시스템입니다. 우회되었거나 발견된 기본 시스템입니다. 아래의 공급업체 목록을 참조하세요.
solved boolean true는 검사를 통과했으며 data가 실제 페이지임을 의미합니다. falsedata가 챌린지 페이지일 수 있음을 의미합니다.
present string[] 이 response에서 인식된 모든 시스템입니다. vendor보다 더 많은 이름을 포함할 수 있으며, 아직 우회하지 못한 이름도 포함될 수 있습니다.
ms number 검사를 우회하는 데 소요된 시간(밀리초)입니다. 통과한 경우에만 표시됩니다.
hashes number 챌린지에서 요구한 연산 작업량입니다. 통과한 경우에만 표시됩니다.
complexity number 챌린지에서 선언한 난이도입니다. 통과한 경우, 그리고 챌린지가 난이도를 보고하는 경우에만 표시됩니다.
answers number 하나가 아닌 여러 개를 요구하는 챌린지에서 제공된 허용된 응답 수입니다. 통과한 경우에만 표시됩니다.
cookie string 통과 시 획득한 클리어런스이며 다시 사용할 수 있습니다. 통과한 경우에만 표시됩니다.

solved: false는 분기 처리할 가치가 있는 케이스입니다. FourA는 해결되지 않은 챌린지를 콘텐츠로 제공하지 않으므로, 이 플래그는 본문을 파싱하는 대신 에스컬레이션해야 한다는 신호입니다.

Browser의 defenses

{
  "status": 200,
  "body": "<!doctype html>...",
  "userAgent": "Mozilla/5.0...",
  "defenseSolved": true,
  "defenses": {
    "present": ["cloudflare"],
    "cleared": ["cloudflare"]
  }
}
필드 타입 설명
defenseSolved boolean 로드 중에 시스템을 발견하고 최종 페이지에서 클리어런스(clearance)를 보유할 때 true입니다. 호출 비용이 15 크레딧인지 30 크레딧인지 결정하는 플래그입니다.
defenses.present string[] 최종 response뿐만 아니라 페이지 로드 중 어느 시점에서든 인식된 모든 시스템입니다. 검사는 이미 발생한 이벤트이며, 실제 페이지가 도착할 때쯤에는 챌린지 response가 이미 사라진 상태입니다.
defenses.cleared string[] 최종 페이지가 클리어런스를 보유한 시스템입니다.

present에 있지만 cleared에 도달하지 않은 이름은 FourA가 인식할 수는 있으나 아직 통과하지 못한 시스템입니다. 이러한 시스템은 호출 비용을 높이지 않습니다.

벤더

vendor 시스템
cloudflare Cloudflare 챌린지 및 봇 관리
sgcaptcha SiteGround 사이트 검사
datadome DataDome
perimeterx PerimeterX
akamai Akamai Bot Manager
incapsula Imperva Incapsula
awswaf AWS WAF 챌린지
ebay-splashui eBay 자체 챌린지
hcaptcha hCaptcha
recaptcha reCAPTCHA

현재 클리어되는 항목

endpoint 클리어 항목
단일, proxy sgcaptcha, ebay-splashui. 둘 다 시각적이라기보다는 연산 위주이므로 브라우저가 개입하지 않습니다.
브라우저 cloudflare, sgcaptcha

목록의 다른 모든 항목은 인식 및 보고만 될 뿐 그 이상은 아닙니다. FourA가 더 많은 항목을 클리어하는 방법을 학습함에 따라 이러한 분류는 변경되므로, 이 표를 통해 가정하기보다는 solved를 확인하십시오.

경계 사례에 대한 두 가지 참고 사항입니다.

  • hcaptcharecaptcha는 일반 양식 위젯이기도 합니다. response가 실제로 차단된 경우(403, 429 또는 503)에만 보고되므로, 양식에 CAPTCHA 필드가 있는 결제 페이지는 방어 시스템으로 보고하지 않습니다.
  • Cloudflare를 사용하는 것 자체는 방어 시스템이 아닙니다. 사이트가 Cloudflare를 사용하기 때문이 아니라 response에 실제 챌린지나 봇 관리 아티팩트가 있을 때 cloudflare가 표시됩니다.

클리어런스 재사용

이 필드의 핵심 목적은 defense.cookie입니다. 클리어런스는 이를 획득한 출구 및 획득한 User-Agent에 바인딩되므로, 동일한 쌍을 통해 재사용하면 검사가 다시 실행되지 않습니다.

import requests

API = "https://eu.api.foura.ai"
H = {"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"}

# 1) First call pays for the clear.
first = requests.post(f"{API}/api/proxy/", headers=H, json={
    "maxTries": 5,
    "request": {"method": "GET", "url": "https://example.com/catalog"},
}).json()

defense = first.get("defense", {})
if defense.get("solved"):
    clearance = defense["cookie"]
    exit_id = first["proxy"]

    # 2) Follow-up pages skip the check: same exit, same clearance.
    for page in range(2, 6):
        r = requests.post(f"{API}/api/single/", headers=H, json={
            "method": "GET",
            "url": f"https://example.com/catalog?page={page}",
            "proxy": exit_id,
            "headers": [["Cookie", clearance]],
        }).json()
        print(page, r["status"])

첫 번째 호출에는 클리어 비용이 발생합니다. 모든 재실행은 일반 요청과 동일하며 일반 가격이 적용됩니다.

재실행이 실패하는 세 가지 이유는 다음과 같습니다:

  1. 다른 출구. 클리어 응답이 반환한 proxy ID를 고정하십시오. 요청 간 프록시 재사용을(를) 참조하십시오.
  2. 다른 User-Agent. Browser 응답은 사용된 userAgent을(를) 반환합니다. cookie와 함께 다시 보내십시오.
  3. 만료. 클리어런스는 타겟이 설정한 자체 수명을 가집니다. SiteGround의 경우 전체 사이트에 대해 약 30일 동안 지속됩니다. Cloudflare 클리어런스는 보통 훨씬 짧습니다. 클리어런스를 캐시로 취급하십시오. 재실행 시 챌린지가 다시 반환되기 시작하면 새 호출을 한 번 실행하고 새로운 것을 가져오십시오.

비용

방어가 클리어된 경우 Browser의 가격만 변경됩니다:

Engine 기본 클리어된 방어
Single 1 (unblocker 사용 시 2) 변경 없음
Proxy 5 (unblocker 사용 시 10) 변경 없음
Browser 15 30

Browser는 solver가 켜져 있고 시스템이 실제로 클리어된 경우에만 30을 청구합니다. 인식되었지만 클리어되지 않은 시스템은 검사가 전혀 없는 페이지와 동일하게 15의 비용이 듭니다.

validate과(와) 함께 사용하기

defense은(는) 검사를 충족했음을 알려줍니다. validate은(는) FourA에 실제 페이지가 어떻게 생겼는지 알려주며, 이는 HTTP 200이 포함된 전면 광고를 전달하는 대신 request를 실패하게 만듭니다.

{
  "method": "GET",
  "url": "https://example.com/product/42",
  "validate": {
    "data": {"accept": ["Add to cart"], "fail": ["Just a moment"]}
  }
}

POST /api/auto/에서 validate는 래더가 챌린지 페이지를 수락하고 완료된 것으로 간주하는 것을 방지합니다.

관련 항목

최근 업데이트: 2026년 8월 12일