Ponowne użycie proxy w żądaniach

Dowiedz się, jak zachować to samo wyjście proxy dla kolejnych żądań, aby renderowanie JavaScript, wywołania API i stronicowane pobierania wychodziły z tego samego IP.

Dlaczego warto ponownie używać proxy

Kiedy po raz pierwszy trafiasz w cel, FourA wybiera dla ciebie działające proxy. Każda odpowiedź zawiera ID użytego proxy. Przekaż to ID w kolejnych żądaniach, a:

  • Kolejne strony ładują się przez to samo wyjście, więc pliki cookie sesji i rate limits pozostają spójne dla celu.
  • Pobieranie ograniczone do kraju pozostaje na twojej allowliście bez ponownego wyboru.
  • Tani endpoint POST /api/single/ jest odtwarzany przez proxy, za którego odkrycie już zapłaciłeś, po koszcie Single zamiast Proxy.

ID proxy to nieprzezroczysty ciąg znaków w formacie base36 (coś jak A1B2C3). Nigdy czyste IP.

Gdzie znajduje się ID w odpowiedzi

Endpoint Pole Kiedy jest obecne
POST /api/auto/ session.proxy Gdy returnSession to true (domyślnie)
POST /api/single/ proxy (najwyższy poziom) Tylko gdy żądanie zawierało pole proxy
POST /api/proxy/ proxy (najwyższy poziom) Zawsze, w przypadku sukcesu
POST /api/browser/ proxy (najwyższy poziom) Tylko gdy żądanie zawierało pole proxy

Aby uzyskać nowe wyjście bez przypisywania go, zacznij od Auto lub Proxy. Obie metody odkrywają działające wyjście i zwracają jego ID.

Wzorzec 1: Auto odkrywa, Single odtwarza

Najlepsze rozwiązanie dla celu, którego jeszcze nie znasz. Auto przechodzi drabinkę jeden raz, a następnie Single ponownie używa zwycięskiej sesji 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, domyślnie).

Wzorzec 2: Proxy odkrywa, przeglądarka renderuje przez to samo wyjście

Użyj tego, gdy cel musi widzieć konkretny kraj wyjściowy, a końcowa zawartość wymaga 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
  }'

Nie wywołuj ponownie /api/proxy/, aby odświeżyć wybór. Nowe wywołanie może wybrać inne wyjście i zniweczyć cel przypinania. Jeśli przypięte wyjście przestanie działać, wykonaj nowe wywołanie /api/proxy/, aby wybrać nowe, a następnie kontynuuj z nim.

Wzorzec 3: Pomijanie spalonego wyjścia

Jeśli wyjście, które wcześniej działało, zacznie zwracać blokady lub wyzwania CAPTCHA, poinstruuj FourA, aby je pominąć 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/ i /api/auto/. Lista jest uwzględniana przy każdej wewnętrznej próbie ponowienia, więc pojedyncze wywołanie z ignoreProxies nigdy nie wybierze spalonych wyjść.

Jak długo przypięta sesja pozostaje aktywna

Samo wyjście żyje tak długo, jak długo bazowe proxy jest zdrowe, zazwyczaj od minut do godzin. Jeśli ponowienie zaczyna zwracać wyzwania, blokady lub nieoczekiwane przekierowania, wyjście prawdopodobnie zostało zrotowane lub cel odświeżył swoją autoryzację.

Dwie opcje, gdy to nastąpi:

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

Cookie sesyjne z odpowiedzi Auto również wygasają zgodnie z własnym harmonogramem celu. Niektóre witryny wiążą autoryzację na godziny, inne na minuty. Traktuj sesję jako pamięć podręczną (cache), a nie trwały token.

Częste błędy

  • Ponowne używanie ID proxy na różnych kontach. Identyfikatory proxy są specyficzne dla konkretnej odpowiedzi. Przekazanie ID z jednego klucza API do drugiego nie gwarantuje, że rozwiąże się na to samo wyjście.
  • Próba dekodowania ID. Ciąg znaków w base36 jest nieprzezroczysty. Nie parsuj go, nie usuwaj znaków, nie zmieniaj na małe litery. Przekaż go z powrotem w niezmienionej formie.
  • Przypinanie przez wyjście z limitem zapytań (rate limit). Jeśli cel nakłada rate limit na adres IP, kierowanie wielu requestów przez jedno wyjście szybciej wywoła blokady. W przypadku dużych obciążeń pozwól, aby tryb Auto lub Proxy rotowały wiele wyjść i przypinaj je tylko tam, gdzie cel tego bezwzględnie wymaga.
  • Ignorowanie exitCountries w kolejnym wywołaniu. Jeśli przypniesz wyjście o określonym zakresie, a następnie wywołasz Proxy ponownie bez exitCountries, kolejne wywołanie może przejść przez inny kraj. Zachowaj zakres w każdym wywołaniu, które tego wymaga.

Powiązane

Aktualizacja: 1 sierpnia 2026