Nouveautés
La rotation des adresses IP de sortie est la partie que tout le monde automatise. L'empreinte de navigateur sous-jacente, elle, ne change généralement jamais.
Single et Proxy Finder acceptent désormais quatre champs facultatifs pour définir quel navigateur votre request présente : browser, os, version et profile. Le catalogue correspondant est public sur GET /api/profiles et ne nécessite aucune clé API. Il contient actuellement 79 profils couvrant Chrome, Edge, Safari, Firefox et Tor, sur Windows, macOS, Android et iOS.
Et si vous n'en spécifiez aucun, Proxy Finder le changera pour vous. Mais uniquement après qu'un site a prouvé par deux fois qu'il refuse celui que vous avez envoyé.
Fonctionnement
Trois de ces champs sont destinés aux humains et un aux machines.
browser, os et version permettent de filtrer le catalogue, et vous pouvez en envoyer n'importe quel sous-ensemble. os filtre par famille, donc demander macOS accepte toutes les versions de macOS dans la liste, tandis que demander l'étiquette exacte de la version restreint le choix à celle-ci. Si plusieurs profils correspondent toujours, la version la plus récente est sélectionnée, car l'intérêt principal est de rester à jour. Les anciennes versions majeures sont précisément la cible des blocklists.
curl -X POST https://eu.api.foura.ai/api/single/ \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"method": "GET",
"url": "https://example.com/listing/42",
"browser": "Safari",
"os": "iOS"
}'
Cela correspond à la version la plus récente de Safari sur iOS dans le catalogue, et envoie le User-Agent, les client hints et l'ordre des headers associés, dans cet ordre précis. L'ordre des headers constitue en soi un signal, rien n'est donc réordonné lors de l'envoi.
profile est le quatrième champ: un identifiant exact issu du catalogue, destiné au code qui doit continuer à envoyer le même client après la sortie d'une version plus récente. Proxy Finder accepte ces quatre éléments dans son objet request. La liste complète des paramètres se trouve dans la référence de l'API, et le Playground lit le même catalogue, ses menus déroulants ne peuvent donc proposer que ce que votre code peut demander. Les quatre mêmes champs sont transmis dans foura_single et foura_proxy sur le serveur MCP, ce qui permet à un agent de réessayer avec un autre navigateur au lieu de renvoyer une simple 403.
Deux choses que ce système refuse délibérément de faire.
Une combinaison absente du catalogue génère une erreur indiquant ce qui est disponible pour ce navigateur. Revenir à une valeur par défaut enverrait un client que vous n'avez pas choisi et que vous ne pouvez pas voir dans la réponse. Un choix de profil avec unblocker: false est également refusé, car ce flag est précisément celui qui transporte les headers (ce que fait réellement ce flag). Un demi-profil est pire que pas de profil du tout.
Le catalogue lui-même est mesuré, non rédigé à la main. Un script exécute chaque profil via le chemin de requête réel et enregistre ce qui est effectivement transmis sur le réseau. Cela compte plus qu'il n'y paraît: entre deux versions majeures récentes d'un même navigateur, la chaîne de marque fictive a changé et l'ordre des marques a été inversé, et c'est exactement le type de détail qu'un service de détection analyse.
Impact
Voici la partie que nous n'avions pas prévue.
Une valeur par défaut est une valeur partagée. Le client présenté par votre requête lorsque vous ne spécifiez rien est le même que celui présenté par toutes les requêtes qui ne demandent rien, et un système de défense cherchant un critère simple à cibler choisit exactement cela. L'échec prend une forme très particulière: un site qui refuse un navigateur donné le refuse sur chacune de vos adresses de sortie. Vous épuisez l'intégralité de votre budget de tentatives pour simplement prouver que ce même client est indésirable.
Nous l'avons mesuré à trois reprises, auprès de trois fournisseurs différents, et le schéma était identique à chaque fois.
Un portail immobilier protégé par PerimeterX a rejeté neuf tentatives avec le profil par défaut. Le simple fait de modifier la plateforme déclarée par la requête (tous les autres paramètres restant identiques, sur le même pool) a renvoyé la page six fois sur six. Un site marchand de compléments alimentaires sous Akamai a refusé le profil par défaut tout en servant deux autres familles de navigateurs sans aucune difficulté. Un site d'actualités financières protégé par DataDome a répondu au profil par défaut par un code 401 et un interstitiel de 774 octets, tandis que trois autres profils ont récupéré la page réelle, d'environ 760 Ko, douze fois chacun. Nous avons exécuté ce test dans les deux sens pour nous assurer que l'ordre des requêtes ne faussait pas le résultat.
Proxy Finder effectue donc désormais une rotation de la famille de navigateurs, et pas seulement du proxy de sortie. Deux sorties indépendantes doivent essuyer un refus avant qu'il ne bascule, car un seul refus ne représente que l'avis d'une seule sortie. Il progresse ensuite le long d'une échelle qui commence par le plus petit changement possible, la plateforme, avant d'essayer d'autres familles.
Cela ne coûte rien. La rotation modifie ce qu'envoie une tentative de retry, jamais le fait qu'un retry ait lieu ou non. Les requêtes et les crédits par tâche restent donc exactement identiques.
Pour les utilisateurs avancés
La rotation sait s'effacer, et ses règles de fonctionnement méritent d'être connues.
Elle ne se déclenche jamais lorsque vous avez défini vous-même un profil. Elle ne se déclenche pas non plus lorsque vous envoyez votre propre header user-agent ou cookie, et ce point est essentiel: un cookie de clearance est lié au client qui l'a obtenu. Modifier la signature sous-jacente lors du rejeu d'une session fonctionnelle casserait une requête qui réussissait. Figez ce que vous souhaitez et la configuration restera inchangée.
Toutes les erreurs ne constituent pas une preuve suffisante pour modifier le profil. Un fournisseur de sécurité identifié compte comme telle. Un code de statut de refus simple (401, 403, 429, 503) sans fournisseur identifié compte également, et ce cas s'est avéré important. Une tâche est revenue avec huit rejets de statut sans aucun fournisseur détecté: de réels refus que la rotation ignorait, car elle ne se fiait qu'au détecteur. Une page introuvable ou un blocage géographique ne comptent pas. Ce sont des réponses liées à votre URL et à votre localisation, pas à votre client.
Vous avez accès à l'ensemble des données. Une réponse réussie de Proxy Finder inclut profile uniquement lorsque nous l'avons choisi, jamais quand vous l'avez fait. Une tâche échouée inclut attemptReport.profilesTried: les familles envoyées, par ordre d'utilisation, avec default pour une requête partie sans modification. Sans ce champ, les situations « nous avons essayé quatre navigateurs et chacun a été refusé » et « nous n'avons jamais changé de navigateur » semblent identiques depuis l'extérieur.
Une bonne pratique à adopter: lorsque vous testez l'efficacité d'un profil, gardez tous les autres paramètres constants. Le tour d'horizon 2026 des outils de test d'empreinte de Scrapfly le résume bien: modifier trois variables entre deux exécutions montre que quelque chose a fonctionné, mais sans indiquer quel changement a été déterminant. Même cible, même sortie, un seul champ modifié. C'est également ainsi que chaque chiffre ci-dessus a été obtenu.
Et ensuite
L'échelle des profils candidats ne s'étoffe que par la mesure, une cible après l'autre. Une famille est ajoutée seulement après avoir constaté qu'elle débloquait une cible inaccessible avec la configuration par défaut, jamais sur une simple intuition. De plus, le catalogue est réévalué à chaque mise à niveau du moteur au lieu d'être reconduit tel quel.
Toute la complexité de ce problème réside là. La meilleure signature client évolue en permanence, son suivi exige un travail continu plutôt qu'une solution définitive livrée en une fois, et ce qui fonctionnait au trimestre précédent est désormais repéré. C'est pourquoi il s'agit d'un champ que vous définissez et d'un catalogue que vous pouvez consulter, plutôt que d'une valeur arbitraire choisie pour vous.