Ponowne użycie proxy w żądaniach

Dowiedz się, jak zachować ten sam węzeł wyjściowy proxy w kolejnych żądaniach, aby renderowanie JavaScript, wywołania API i pobieranie stron pochodziły z tego samego adresu IP.

Dlaczego warto ponownie używać proxy

Gdy po raz pierwszy wysyłasz żądanie do celu, FourA wybiera dla Ciebie działające proxy. Każda odpowiedź zawiera identyfikator użytego proxy. Przekaż ten ID w kolejnych żądaniach, a:

  • Kolejne strony będą pobierane przez ten sam węzeł wyjściowy, więc pliki cookie sesji i limity zapytań pozostaną spójne dla celu.
  • Pobieranie ograniczone do danego kraju pozostanie w ramach Twojej allowlisty bez konieczności ponownego wyboru.
  • Tani endpoint POST /api/single/ wykonuje ponowne żądania przez proxy, za którego wykrycie już zapłacono, w cenie Single zamiast Proxy.

Identyfikator proxy to nieprzejrzysty ciąg base36 (np. A1B2C3). Nigdy nie jest to surowy adres IP.

Gdzie znajduje się ID w odpowiedzi

Endpoint Pole Kiedy występuje
POST /api/auto/ session.proxy Gdy parametr returnSession ma wartość true (domyślnie)
POST /api/single/ proxy (główny poziom) Tylko wtedy, gdy żądanie zawierało pole proxy
POST /api/proxy/ proxy (główny poziom) Zawsze, przy sukcesie
POST /api/browser/ proxy (główny poziom) Tylko wtedy, gdy żądanie zawierało pole proxy

Aby pobrać nowy węzeł wyjściowy bez przypisywania konkretnego, zacznij od trybu Auto lub Proxy. Oba wykrywają działający węzeł wyjściowy i zwracają jego ID.

Wzorzec 1: Auto wykrywa, Single odtwarza

Najlepsze rozwiązanie, gdy cel nie jest jeszcze znany. Auto przechodzi drabinkę jeden raz, a następnie Single ponownie wykorzystuje wygraną sesję dla każdej kolejnej strony.

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"])

Wywołanie Auto kosztuje tyle, ile zużyje jego drabina. Każde kolejne wywołanie Single kosztuje 2 kredyty (Single z unblocker, wartość domyślna).

Wzorzec 2: Proxy wykrywa, Browser renderuje przez to samo wyjście

Użyj tego rozwiązania, gdy cel musi widzieć określony kraj wyjściowy, a ostateczna treść wymaga JavaScriptu.

# 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
  }'

Nie wywołuj ponownie /api/proxy/, aby odświeżyć wybór. Nowe wywołanie może wybrać inny węzeł wyjściowy (exit) i zniweczyć cel przypinania (pinning). Jeśli przypięty exit przestanie działać, wykonaj nowe wywołanie /api/proxy/, aby wybrać nowy, a następnie kontynuuj pracę z nim.

Wzorzec 3: Pomijanie spalonego węzła wyjściowego (burned exit)

Jeśli exit, który wcześniej działał, zaczyna zwracać odmowy lub strony weryfikacyjne, poinstruuj FourA, aby unikać go przy następnym wyborze.

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

ignoreProxies przyjmuje listę identyfikatorów proxy z wcześniejszych odpowiedzi. Działa w /api/proxy/ oraz /api/auto/. Lista jest respektowana przy każdej wewnętrznej próbie ponowienia, więc pojedyncze wywołanie z ignoreProxies nigdy nie wybierze spalonych węzłów wyjściowych.

Jak długo przypięta sesja pozostaje aktywna

Sam węzeł wyjściowy działa tak długo, jak długo bazowe proxy jest sprawne, zazwyczaj od kilku minut do kilku godzin. Jeśli ponowne żądanie zaczyna zwracać challenge, blokady lub nieoczekiwane przekierowania, węzeł wyjściowy prawdopodobnie został zrotowany lub cel zresetował autoryzację clearance.

Gdy to nastąpi, masz dwie opcje:

  1. Nowe wywołanie /api/auto/ dla tego samego URL. Tryb Auto wykryje nową działającą sesję; porzuć poprzednie identyfikatory.
  2. Nowe wywołanie /api/proxy/ z ignoreProxies: ["<burned-id>"], jeśli chcesz kontynuować ręczne przypinanie.

Pliki cookie sesji z odpowiedzi Auto również wygasają zgodnie z harmonogramem samego celu. Niektóre witryny utrzymują clearance przez wiele godzin, inne przez minuty. Traktuj sesję jak pamięć podręczną, a nie trwały token.

Gdy identyfikator nie daje się przypiąć

Wartość proxy może zwrócić trzy różne błędy 400, które oznaczają odmienne sytuacje:

Błąd Co się stało Co zrobić
Invalid proxy format Wartość nie jest identyfikatorem wystawionym przez FourA. Trafia tu surowy adres proxy. Prześlij nieprzejrzysty ciąg znaków z odpowiedzi, dosłownie.
Proxy not found Identyfikator został zdekodowany, ale nie wskazuje już na aktywny węzeł wyjściowy. Pobierz nowy węzeł wyjściowy z nowego wywołania Auto lub Proxy.
Managed exit: this proxy id cannot be pinned to a request Identyfikator dotyczy węzła premium, a limit transferu premium w Twoim planie na ten okres został wyczerpany lub Twój plan nie obejmuje węzłów premium. Wykonaj wywołanie przez POST /api/proxy/ i użyj węzła, który zostanie wybrany, albo dokup transfer premium i przypnij go ponownie.

Trzeci błąd może zostać zwrócony dla identyfikatora otrzymanego z udanego wywołania, więc możesz na niego trafić bez popełnienia żadnego błędu. Potraktuj go tak, jak wygasłą sesję: zamiast ponawiać próby z tym samym identyfikatorem, wykonaj nowe wywołanie wykrywające.

Częste błędy

  • Ponowne używanie ID proxy między kontami. Nie udostępniaj ID między kontami: ID, które jedno konto może przypiąć, może zostać odrzucone dla innego, na przykład węzeł wyjściowy premium w planie bez ruchu premium.
  • Próby dekodowania ID. Ciąg base36 jest nieprzejrzysty. Nie parsuj go, nie usuwaj znaków ani nie zmieniaj wielkości liter na małe. Przekazuj go dosłownie.
  • Przypinanie przez węzeł wyjściowy objęty rate limitem. Jeśli cel nakłada rate limit na adres IP, kierowanie wielu requestów przez jeden węzeł wyjściowy szybciej wywoła blokady. W przypadku obciążeń o dużej objętości pozwól Auto lub Proxy na rotację przez wiele węzłów wyjściowych i przypinaj tylko wtedy, gdy cel rzeczywiście tego wymaga.
  • Przypinanie węzła wyjściowego premium bez takiej intencji. ID z wywołania obsłużonego przez węzeł wyjściowy premium (exitClass: "premium" w Proxy) przypina ten węzeł premium. Każde ponowne wywołanie przez niego wlicza się do Twojego limitu ruchu premium, a response zawiera X-FourA-Exit-Class: premium.
  • Wysyłanie exitCountries w planie bez targetowania geograficznego. Zakres kraju jest dostępny od planu Startup wzwyż. W planie bez tej funkcji wywołanie wysyłające exitCountries jest odrzucane z 403 i X-FourA-Limit: plan_limit_feature.
  • Ignorowanie exitCountries w kolejnym wywołaniu. Jeśli przypiszesz węzeł wyjściowy z określonym zakresem, a następnie wywołasz Proxy ponownie bez exitCountries, kolejne wywołanie może przejść przez inny kraj. Zachowaj parametr scope przy każdym wywołaniu, które go wymaga.

Powiązane

Aktualizacja: 27 września 2026