Réutiliser un proxy entre les requêtes
Découvrez comment conserver la même sortie proxy sur vos requêtes suivantes, afin que les rendus JavaScript, les appels API et les récupérations paginées partent tous de la même IP.
Pourquoi réutiliser un proxy
Lorsque vous ciblez une URL pour la première fois, FourA choisit un proxy fonctionnel pour vous. Chaque réponse inclut l'ID du proxy utilisé. Renvoyez cet ID lors des requêtes suivantes et :
- Les pages suivantes passent par la même sortie, ce qui maintient la cohérence des cookies de session et des rate limits auprès de la cible.
- Une requête ciblée par pays reste dans votre liste autorisée sans nécessiter une nouvelle sélection.
- L'endpoint économique
POST /api/single/rejoue la requête via un proxy que vous avez déjà payé pour découvrir, au tarif Single plutôt qu'au tarif Proxy.
L'ID de proxy est une chaîne opaque en base36 (par exemple A1B2C3). Jamais une IP brute.
Où trouver l'ID dans une réponse
| Endpoint | Field | When it's present |
|---|---|---|
POST /api/auto/ |
session.proxy |
Lorsque returnSession est true (valeur par défaut) |
POST /api/single/ |
proxy (niveau racine) |
Uniquement lorsque la requête a fourni un champ proxy |
POST /api/proxy/ |
proxy (niveau racine) |
Toujours, en cas de succès |
POST /api/browser/ |
proxy (niveau racine) |
Uniquement lorsque la requête a fourni un champ proxy |
Pour obtenir une nouvelle sortie sans en fixer une, commencez par Auto ou Proxy. Tous deux découvrent une sortie fonctionnelle et vous renvoient son ID.
Modèle 1 : Auto découvre, Single rejoue
Idéal lorsque vous traitez une cible que vous ne connaissez pas encore. Auto parcourt l'échelle une fois, puis Single réutilise la session retenue pour chaque page suivante.
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"])
L'appel Auto coûte ce que son échelle consomme. Chaque appel Single de suivi coûte 2 crédits (Single avec unblocker, la valeur par défaut).
Modèle 2 : Proxy découvre, Browser effectue le rendu via la même sortie
Utilisez ceci lorsque la cible doit voir un pays de sortie spécifique et que le contenu final nécessite 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
}'
N'appelez pas /api/proxy/ à nouveau pour actualiser la sélection. Un nouvel appel peut choisir une sortie différente et annuler l'intérêt du pinning. Si la sortie épinglée cesse de fonctionner, exécutez un nouvel appel /api/proxy/ pour en choisir une nouvelle, puis continuez avec celle-ci.
Pattern 3 : Ignorer une sortie brûlée
Si une sortie qui fonctionnait commence à renvoyer des refus ou des pages de vérification, indiquez à FourA de l'éviter lors de la prochaine sélection.
{
"maxTries": 5,
"ignoreProxies": ["A1B2C3"],
"request": { "method": "GET", "url": "https://example.com/data" }
}
ignoreProxies accepte une liste d'identifiants de proxy issus de réponses précédentes. Il fonctionne sur /api/proxy/ et /api/auto/. La liste est respectée à chaque nouvelle tentative interne, de sorte qu'un seul appel avec ignoreProxies ne sélectionne jamais les sorties grillées.
Durée de validité d'une session épinglée
La sortie elle-même reste active tant que le proxy sous-jacent est sain, généralement de quelques minutes à plusieurs heures. Si une réémission commence à renvoyer des challenges, des blocages ou des redirections inattendues, la sortie a probablement été renouvelée ou la cible a actualisé ses autorisations.
Deux options s'offrent à vous dans ce cas :
- Nouvel appel
/api/auto/pour la même URL. Auto découvrira une nouvelle session fonctionnelle ; abandonnez les identifiants précédents. - Nouvel appel
/api/proxy/avecignoreProxies: ["<burned-id>"]si vous souhaitez continuer l'épinglage manuel.
Les cookies de session issus d'une réponse Auto expirent également selon le calendrier propre à la cible. Certains sites conservent l'autorisation pendant des heures, d'autres pendant quelques minutes. Considérez la session comme un cache et non comme un token permanent.
Quand un identifiant ne peut pas être épinglé
Trois erreurs 400 peuvent être retournées par une valeur proxy, et elles ont des significations différentes :
| Erreur | Ce qui s'est passé | Que faire |
|---|---|---|
Invalid proxy format |
La valeur n'est pas un identifiant émis par FourA. Une adresse proxy brute aboutit ici. | Envoyez la chaîne opaque issue d'une réponse, textuellement. |
Proxy not found |
L'identifiant a été décodé, mais il ne correspond plus à une sortie active. | Récupérez une nouvelle sortie depuis un nouvel appel Auto ou Proxy. |
Managed exit: this proxy id cannot be pinned to a request |
L'identifiant est une sortie premium, et le trafic premium de votre forfait pour cette période est épuisé, ou votre forfait n'inclut pas les sorties premium. | Exécutez l'appel via POST /api/proxy/ et utilisez la sortie sélectionnée, ou ajoutez du trafic premium et épinglez-le à nouveau. |
La troisième erreur provient d'un identifiant fourni lors d'un appel réussi ; vous pouvez donc la rencontrer sans avoir commis d'erreur. Traitez-la comme une session expirée : basculez vers un nouvel appel de découverte plutôt que de réessayer le même identifiant.
Erreurs courantes
- Réutiliser un ID de proxy entre plusieurs comptes. Ne partagez pas les ID entre vos comptes : un ID qu'un compte peut épingler peut être refusé pour un autre, par exemple une sortie premium sur un forfait sans trafic premium.
- Tenter de décoder l'ID. La chaîne base36 est opaque. Ne l'analysez pas, ne supprimez aucun caractère, ne la passez pas en minuscules. Renvoyez-la telle quelle.
- Épingler une sortie soumise à un rate limit. Si la cible applique un rate limit par IP, faire transiter de nombreuses requêtes par une seule sortie déclenchera des blocages plus rapidement. Pour les charges de travail volumineuses, laissez Auto ou Proxy alterner entre plusieurs sorties et n'épinglez que lorsque la cible l'exige réellement.
- Épingler involontairement une sortie premium. Un ID provenant d'un appel traité par une sortie premium (
exitClass: "premium"sur Proxy) épingle cette sortie premium. Chaque rejeu via celle-ci est décompté de votre trafic premium, et la réponse inclutX-FourA-Exit-Class: premium. - Envoyer
exitCountriessur un forfait sans ciblage géographique. Le ciblage par pays est inclus à partir du forfait Startup. Sur un forfait qui ne l'inclut pas, un appel envoyantexitCountriesest refusé avec un403etX-FourA-Limit: plan_limit_feature. - Omettre
exitCountrieslors du suivi. Si vous épinglez une sortie ciblée géographiquement puis appelez à nouveau Proxy sansexitCountries, la requête suivante peut aboutir via un autre pays. Conservez le ciblage sur chaque appel qui le nécessite.
Pages connexes
- Endpoints d'API : Référence complète des paramètres et réponses
- Smart Fetch (Auto) : Comment Auto construit la session que vous rejouez
- Sites protégés : Quand l'épinglage est utile et quand la rotation est préférable
- Problèmes courants :
no_eligible_proxyet autres erreurs de proxy - Pourquoi une requête de proxy a épuisé ses tentatives : Interpréter
attemptReportlorsqu'un appel de Proxy abandonne