여러 request에서 proxy 재사용

후속 request에서 동일한 proxy 출구를 유지하여 JavaScript 렌더링, API 호출 및 페이지가 매겨진 fetch가 모두 동일한 IP에서 출발하도록 하는 방법을 알아봅니다.

proxy를 재사용하는 이유

타겟에 처음 요청할 때 FourA는 작동하는 proxy를 선택합니다. 모든 response에는 사용된 proxy ID가 포함됩니다. 이후 request에서 해당 ID를 다시 전달하면 다음과 같습니다.

  • 후속 페이지가 동일한 출구를 통해 도달하므로 세션 cookie 및 rate limit이 타겟에 대해 일관되게 유지됩니다.
  • 국가로 범위가 지정된 fetch는 새로운 선택 없이 허용 목록 내에 유지됩니다.
  • 저렴한 POST /api/single/ endpoint는 Proxy 비용 대신 Single 비용으로, 이미 비용을 지불하여 찾은 proxy를 통해 재생됩니다.

proxy ID는 불투명한 base36 문자열(A1B2C3와 같은 형태)입니다. 절대 원시 IP가 아닙니다.

response에서 ID의 위치

Endpoint Field 표시되는 경우
POST /api/auto/ session.proxy returnSessiontrue(기본값)인 경우
POST /api/single/ proxy(최상위 레벨) request에 proxy 필드가 제공된 경우에만
POST /api/proxy/ proxy(최상위 레벨) 성공 시 항상
POST /api/browser/ proxy(최상위 레벨) request에 proxy 필드가 제공된 경우에만

출구를 고정하지 않고 새로운 출구를 얻으려면 Auto 또는 Proxy로 시작하십시오. 두 가지 모두 작동하는 출구를 찾아 그 ID를 반환합니다.

패턴 1: Auto가 찾고, Single이 재생

아직 모르는 타겟이 있을 때 가장 좋습니다. Auto가 사다리를 한 번 탐색한 다음, Single이 모든 후속 페이지에 대해 성공한 세션을 재사용합니다.

import requests

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

# Step 1: discover a working exit with Auto.
r = requests.post(f"{API}/api/auto/", headers=H, json={
    "url": "https://example.com/product/42",
    "validate": {"data": {"accept": ["Add to cart"]}}
}).json()

session = r["session"]
proxy = session["proxy"]
user_agent = session["userAgent"]

# Step 2: paginate with Single, reusing the same exit and User-Agent.
for sku in ("43", "44", "45"):
    p = requests.post(f"{API}/api/single/", headers=H, json={
        "method": "GET",
        "url": f"https://example.com/product/{sku}",
        "proxy": proxy,
        "headers": [["User-Agent", user_agent]],
    }).json()
    print(sku, p["status"])

Auto 호출 비용은 래더가 소비한 만큼 청구됩니다. 이후의 모든 Single 호출은 2 크레딧이 청구됩니다(기본값인 unblocker을 사용하는 Single).

패턴 2: Proxy가 검색하고 브라우저가 동일한 출구를 통해 렌더링

대상이 특정 출구 국가를 확인해야 하고 최종 콘텐츠에 JavaScript가 필요한 경우 사용합니다.

# Step 1: pick a country-scoped exit with Proxy.
curl -X POST https://eu.api.foura.ai/api/proxy/ \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "maxTries": 5,
    "exitCountries": ["FR", "GB"],
    "request": {"method": "GET", "url": "https://example.com/pricing"}
  }'
# Response includes: "proxy": "A1B2C3", "exitCountry": "FR"

# Step 2: render the JS-heavy page through THAT exit.
curl -X POST https://eu.api.foura.ai/api/browser/ \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/pricing",
    "proxy": "A1B2C3",
    "timeout_ms": 20000
  }'

선택을 새로 고치기 위해 /api/proxy/을 다시 호출하지 마십시오. 새 호출은 다른 exit를 선택하여 고정 목적을 무효화할 수 있습니다. 고정된 exit가 작동을 멈추면 새로운 /api/proxy/ 호출을 실행하여 새 exit를 선택한 후 계속 진행하십시오.

패턴 3: 차단된 exit 건너뛰기

이전에 작동하던 exit가 차단 또는 CAPTCHA를 반환하기 시작하면, 다음 선택 시 해당 exit를 피하도록 FourA에 지시하십시오.

{
  "maxTries": 5,
  "ignoreProxies": ["A1B2C3"],
  "request": { "method": "GET", "url": "https://example.com/data" }
}

ignoreProxies는 이전 응답에서 받은 proxy ID 목록을 허용합니다. /api/proxy//api/auto/에서 작동합니다. 이 목록은 모든 내부 재시도에서 준수되므로 ignoreProxies를 사용한 단일 호출은 소진된 exit을 선택하지 않습니다.

고정된 세션의 유지 시간

exit 자체는 기반 proxy가 정상적인 한 유지되며, 일반적으로 수 분에서 수 시간입니다. 재시도 시 챌린지, 차단 또는 예상치 못한 리디렉션이 반환되기 시작하면 exit이 교체되었거나 대상이 클리어런스를 갱신했을 가능성이 높습니다.

이 경우 두 가지 옵션이 있습니다:

  1. 동일한 URL에 대한 새로운 /api/auto/ 호출. Auto가 새로운 작동 세션을 검색하며, 이전 ID는 삭제합니다.
  2. 수동 고정을 유지하려면 ignoreProxies: ["<burned-id>"]를 사용한 새로운 /api/proxy/ 호출.

Auto 응답의 세션 쿠키도 대상 자체 일정에 따라 만료됩니다. 어떤 사이트는 클리어런스를 수 시간 유지하지만, 다른 사이트는 수 분만 유지합니다. 세션을 영구 토큰이 아닌 캐시로 취급하십시오.

일반적인 실수

  • 계정 간 proxy ID 재사용. Proxy ID는 응답별 식별자입니다. 한 API 키의 ID를 다른 키로 전달한다고 해서 동일한 exit으로 연결된다고 보장할 수 없습니다.
  • ID 디코딩 시도. base36 문자열은 불투명합니다. 파싱, 문자 제거 또는 소문자 변환을 하지 마십시오. 있는 그대로 전달하십시오.
  • rate limit된 exit을 통한 고정. 대상이 IP 단위로 rate limit을 적용하는 경우 단일 exit으로 다수의 요청을 보내면 더 빠르게 차단됩니다. 대규모 워크로드의 경우 Auto 또는 Proxy가 다수의 exit을 순환하도록 하고, 대상이 반드시 요구하는 경우에만 고정하십시오.
  • 후속 요청에서 exitCountries 무시. 범위가 지정된 exit을 고정하고 exitCountries 없이 Proxy를 다시 호출하면, 후속 요청이 다른 국가로 라우팅될 수 있습니다. 필요한 모든 호출에 범위를 유지하십시오.

관련 문서

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