Proxy für mehrere Requests wiederverwenden
Erfahre, wie du denselben Proxy-Exit für nachfolgende Requests beibehältst, damit JavaScript-Renderings, API-Aufrufe und paginierte Abrufe alle von derselben IP ausgehen.
Warum einen Proxy wiederverwenden
Wenn du ein Ziel zum ersten Mal anfragst, wählt FourA einen funktionierenden Proxy für dich aus. Jede Response enthält die verwendete Proxy-ID. Übergib diese ID bei späteren Requests und:
- Nachfolgende Seiten laufen über denselben Exit, sodass Session-Cookies und Rate Limits für das Ziel kohärent bleiben.
- Ein auf ein Land beschränkter Abruf bleibt ohne erneute Auswahl innerhalb deiner Allowlist.
- Der günstige
POST /api/single/-Endpoint leitet Requests über einen Proxy weiter, dessen Ermittlung du bereits bezahlt hast, zu den Kosten von Single statt Proxy.
Die Proxy-ID ist ein opaker Base36-String (etwa A1B2C3). Niemals eine reine IP.
Wo sich die ID in einer Response befindet
| Endpoint | Field | When it's present |
|---|---|---|
POST /api/auto/ |
session.proxy |
Wenn returnSession auf true steht (Standard) |
POST /api/single/ |
proxy (Top-Level) |
Nur wenn der Request ein proxy-Feld übergeben hat |
POST /api/proxy/ |
proxy (Top-Level) |
Immer bei Erfolg |
POST /api/browser/ |
proxy (Top-Level) |
Nur wenn der Request ein proxy-Feld übergeben hat |
Um einen neuen Exit ohne Pinning zu nutzen, starte mit Auto oder Proxy. Beide ermitteln einen funktionierenden Exit und geben dessen ID für dich zurück.
Pattern 1: Auto ermittelt, Single wiederholt
Optimal, wenn du ein Ziel noch nicht kennst. Auto durchläuft die Kaskade einmal, danach nutzt Single die erfolgreiche Session für jede nachfolgende Seite wieder.
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"])
Der Auto-Aufruf kostet so viel, wie seine Ladder verbraucht. Jeder nachfolgende Single-Aufruf kostet 2 Credits (Single mit unblocker, der Standard).
Pattern 2: Proxy erkennt, Browser rendert über denselben Exit
Nutze dies, wenn das Ziel ein bestimmtes Exit-Land sehen muss und der finale Inhalt JavaScript benötigt.
# 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
}'
Rufe /api/proxy/ nicht erneut auf, um die Auswahl zu aktualisieren. Ein neuer Aufruf wählt möglicherweise einen anderen Exit und macht das Pinning nutzlos. Wenn der gepinnte Exit nicht mehr funktioniert, führe einen neuen /api/proxy/-Aufruf aus, um einen neuen zu wählen, und fahre damit fort.
Pattern 3: Einen verbrannten Exit überspringen
Wenn ein zuvor funktionierender Exit Ablehnungen oder Verifizierungsseiten zurückgibt, weise FourA an, ihn bei der nächsten Auswahl zu meiden.
{
"maxTries": 5,
"ignoreProxies": ["A1B2C3"],
"request": { "method": "GET", "url": "https://example.com/data" }
}
ignoreProxies akzeptiert eine Liste von Proxy-IDs aus früheren Responses. Es funktioniert mit /api/proxy/ und /api/auto/. Die Liste wird bei jedem internen Retry berücksichtigt, sodass ein einzelner Call mit ignoreProxies niemals die verbrannten Exits auswählt.
Wie lange eine gepinnte Session aktiv bleibt
Der Exit selbst bleibt aktiv, solange der zugrunde liegende Proxy intakt ist, typischerweise Minuten bis Stunden. Wenn ein Replay Challenges, Blocks oder unerwartete Redirects zurückgibt, wurde der Exit wahrscheinlich rotiert oder das Ziel hat seine Clearance aktualisiert.
Zwei Optionen in diesem Fall:
- Neuer
/api/auto/-Call für dieselbe URL. Auto ermittelt eine neue funktionierende Session; verwirf die vorherigen IDs. - Neuer
/api/proxy/-Call mitignoreProxies: ["<burned-id>"], wenn du weiterhin manuell pinnen möchtest.
Session-Cookies aus einer Auto-Response laufen ebenfalls nach dem Zeitplan des Ziels ab. Einige Sites binden Clearance für Stunden, andere für Minuten. Behandle die Session wie einen Cache, nicht wie ein dauerhaftes Token.
Wenn sich eine ID nicht pinnen lässt
Drei 400-Fehler können von einem proxy-Wert zurückkommen, und sie bedeuten unterschiedliche Dinge:
| Error | What happened | What to do |
|---|---|---|
Invalid proxy format |
Der Wert ist keine von FourA ausgestellte ID. Eine reine Proxy-Adresse landet hier. | Sende den opaken String aus einer Response unverändert. |
Proxy not found |
Die ID wurde dekodiert, verweist aber nicht mehr auf einen aktiven Exit. | Verwende einen neuen Exit aus einem neuen Auto- oder Proxy-Call. |
Managed exit: this proxy id cannot be pinned to a request |
Die ID ist ein Premium-Exit und der Premium-Traffic deines Plans für diesen Zeitraum ist aufgebraucht, oder dein Plan enthält keine Premium-Exits. | Führe den Call über POST /api/proxy/ aus und nimm den ausgewählten Exit, oder füge Premium-Traffic hinzu und pinne ihn erneut. |
Der dritte Fehler kann bei einer ID auftreten, die dir ein erfolgreicher Call geliefert hat. Du kannst darauf stoßen, ohne einen Fehler gemacht zu haben. Behandle ihn wie eine abgelaufene Session: Wechsle zu einem neuen Discovery-Call, anstatt dieselbe ID erneut zu versuchen.
Häufige Fehler
- Wiederverwendung einer Proxy-ID ueber Konten hinweg. Teile keine IDs zwischen Konten: Eine ID, die ein Konto pinnen kann, wird fuer ein anderes moeglicherweise abgelehnt, beispielsweise ein Premium-Exit bei einem Tarif ohne Premium-Traffic.
- Versuch, die ID zu decodieren. Der Base36-String ist opak. Parse ihn nicht, entferne keine Zeichen und wandle ihn nicht in Kleinbuchstaben um. Uebergib ihn unveraendert zurueck.
- Pinning ueber einen Exit mit Rate-Limit. Wenn das Ziel ein Rate-Limit pro IP erzwingt, fuehren viele Requests ueber einen einzigen Exit schneller zu Blockaden. Lass Auto oder Proxy bei Workloads mit hohem Volumen ueber viele Exits rotieren und pinne nur dann, wenn das Ziel es wirklich erfordert.
- Unbeabsichtigtes Pinnen eines Premium-Exits. Eine ID aus einem Aufruf, der ueber einen Premium-Exit bedient wurde (
exitClass: "premium"bei Proxy), pinnt diesen Premium-Exit. Jeder Replay darueber wird auf deinen Premium-Traffic angerechnet und die Response enthaeltX-FourA-Exit-Class: premium. - Senden von
exitCountriesin einem Tarif ohne Geo-Targeting. Laender-Scoping ist ab dem Startup-Tarif enthalten. In einem Tarif ohne diese Funktion wird ein Aufruf, derexitCountriessendet, mit403undX-FourA-Limit: plan_limit_featureabgelehnt. - Ignorieren von
exitCountriesbeim Folgeaufruf. Wenn du einen gescopten Exit pinnst und Proxy anschliessend ohneexitCountriesaufrufst, kann der Folgeaufruf ueber ein anderes Land erfolgen. Behalte den Scope bei jedem Aufruf bei, der ihn benoetigt.
Verwandte Themen
- API-Endpoints: Vollstaendige Referenz zu Parametern und Responses
- Smart Fetch (Auto): Wie Auto die Session aufbaut, die du erneut abspielst
- Geschuetzte Websites: Wann Pinning hilft und wann Rotation besser ist
- Haeufige Probleme:
no_eligible_proxyund andere Proxy-Fehler - Warum ein Proxy-Request keine Versuche mehr hatte:
attemptReportlesen, wenn ein Proxy-Aufruf abbricht