Nouveautés
Une seule lettre manquante suffit. Saisissez -contry-de dans un nom d'utilisateur proxy et la coquille passe inaperçue, ressemblant trait pour trait à une option valide.
Le port de proxy FourA répond à cela par une erreur 400 qui liste chaque clé reconnue. C'est un détail parmi d'autres d'un produit qui a quitté la phase bêta le 15 septembre : une URL de proxy sur nos sorties pour tout client compatible (un navigateur, un outil de téléchargement, le scraper que vous utilisez déjà), sans aucun appel API à écrire. Vous créez un utilisateur proxy dans le Dashboard, collez la chaîne, et les tunnels ainsi que le trafic sont décomptés de votre forfait exactement comme les requêtes API.
Voici la grammaire complète, et la raison d'être de chaque règle.
Fonctionnement
Le port est accessible sur proxy.foura.ai:34004 et communique via HTTP CONNECT avec authentification Basic, vers des cibles sur les ports 443 et 80. Les identifiants sont des utilisateurs proxy, délibérément distincts de votre clé API : un handshake proxy circule en clair, et un utilisateur proxy peut recevoir un nouveau mot de passe sans nécessiter de modification sur votre intégration API.
Tout ce qui suit l'identifiant est une liste de paires -key-value, dans n'importe quel ordre :
# Shared network, a German address, one sticky session for this job
curl -x "http://USERNAME-country-de-session-job42:PASSWORD@proxy.foura.ai:34004" \
https://example.com
# Premium network, an Android address in Germany, held 30 minutes
curl -x "http://USERNAME-network-premium-country-de-os-android-session-s1-lifetime-30:PASSWORD@proxy.foura.ai:34004" \
https://example.com
Shared correspond aux sorties propres de FourA : l'option par défaut, incluse dans votre forfait. Premium correspond aux adresses résidentielles, prélevées sur le trafic premium de votre forfait ainsi que sur vos éventuels achats supplémentaires. Sur le réseau partagé, -fallback-premium permet à une connexion de basculer vers une sortie premium lorsque la sortie partagée ne peut pas l'acheminer. Cette option est désactivée sauf demande expresse de votre part, et elle ne s'active que s'il vous reste du quota premium. L'activer par défaut reviendrait à décider, à votre place, de consommer ce quota.
Le paramètre de pays peut être répété, donc -country-de-country-fr définit un périmètre couvrant deux pays. La région, la ville, le réseau par numéro d'AS, l'appareil (windows, android, ios, mac) et lifetime (de 3 à 1440 minutes) sont réservés au mode premium. Si vous demandez une ville sur le réseau partagé, vous obtenez une erreur 400 plutôt qu'un traitement au mieux. Le réseau partagé se sélectionne par pays et rien de plus précis, car un filtre par ville qui échoue la plupart du temps est pire que l'absence totale de filtre.
-session-<name> (1 à 32 lettres, chiffres ou tirets bas) rend les connexions persistantes : chaque connexion portant ce nom partage la même adresse. Sur le réseau partagé, l'adresse est conservée sur une fenêtre glissante de dix minutes, elle reste donc active tant que vous continuez à l'utiliser. Sur le réseau premium, elle est conservée pendant la durée lifetime que vous avez définie, ou selon la valeur par défaut du réseau. Si vous omettez la session, chaque connexion partira d'une nouvelle adresse.
Il existe ensuite des valeurs par défaut enregistrées. Le ciblage enregistré sur un utilisateur proxy dans le tableau de bord s'applique à chaque connexion qu'il établit, ce qui permet de réduire la chaîne aux seuls identifiants. Le nom d'utilisateur reste prioritaire pour sa propre connexion, et any permet d'annuler une valeur enregistrée : -city-any demande l'ensemble de l'Allemagne à une clé configurée pour retenir Munich. Les clients capables d'ajouter des en-têtes à une requête CONNECT (curl le permet avec --proxy-header) peuvent transmettre les mêmes options via X-Foura-Country, X-Foura-Session et les autres, et l'en-tête prévaut sur le nom d'utilisateur.
Impact
La plupart de ces changements répondent directement à des questions que vous n'aurez plus besoin de vous poser.
Pourquoi ai-je été refusé ? Chaque refus survenant après la vérification de vos identifiants inclut un en-tête X-Foura-Error détaillant le motif sur une ligne. Une erreur 400 indique l'option concernée et les valeurs acceptées. Une erreur 429 précise la limite de votre forfait atteinte : tunnels ouverts simultanément, ouvertures de tunnels par minute ou trafic standard pour la période de facturation.
À qui appartient le quota ? Au compte. Les tunnels et les ouvertures sont comptabilisés au niveau du compte et non par utilisateur proxy, de sorte qu'un second identifiant ne donne pas droit à un second quota. Les octets sont décomptés de la bande passante de votre forfait, et les octets premium sont décomptés de votre quota premium inclus dans ce total, sans jamais s'y ajouter. Sur un forfait vendu sous forme de crédits, le port dispose de ses propres gigaoctets inclus, que la page Facturation permet de recharger. Rien n'est décompté si aucun tunnel ne s'ouvre.
À qui appartient l'identifiant ? Il peut désormais appartenir à une organisation, ce qui évite d'interrompre les scripts de téléchargement d'une entreprise dès qu'une personne s'en va. Les membres l'utilisent et consultent son mot de passe ; les administrateurs et les propriétaires peuvent le renouveler, le désactiver ou modifier son ciblage ; seul le propriétaire peut le transférer.
Qu'est-ce que cela a fait ? Basculez le sélecteur de produit sur Aperçu, Métriques ou Activité vers Proxy : des tunnels dans les mêmes classes de résultats que vos requêtes API, le nombre de tunnels ouverts actuellement, le temps d'établissement et le trafic, ventilés par utilisateur proxy, cible, pays de sortie ou IP client. Une session disposant déjà de son adresse se connecte généralement en bien moins d'une seconde.
Mais le port est un simple tuyau, et c'est là le compromis. Votre client communique avec le site via le tunnel, donc le débloqueur, vos validate rules et la résolution de challenges basée sur navigateur ne sont pas sur ce chemin. Il mesure aussi les octets : une page de refus transmise via un tunnel ouvert représente des octets comme les autres, alors que sur l'API, une requête qui n'aboutit pas n'est pas facturée. Faites passer les octets par le port ; envoyez les pages qui posent problème à l'API.
Pour les utilisateurs avancés
Une fois le quota premium épuisé, les trois routes vers ce réseau reçoivent trois réponses différentes, délibérément. Une connexion qui spécifie -network-premium est refusée avec une erreur 403 explicite, car un appelant servi silencieusement depuis un autre endroit continuerait d'émettre des requêtes, puis chercherait sur la facture une ligne premium qui n'apparaît jamais. Le fallback n'est tout simplement pas utilisé, et une configuration premium par défaut enregistrée sur l'utilisateur proxy bascule sur le réseau partagé, ce qui permet au tunnel de s'ouvrir. Aucun de ces deux cas n'a choisi de consommer du quota sur cette connexion.
Trois combinaisons sont refusées d'emblée plutôt qu'honorées à moitié : un ciblage plus précis sur le réseau partagé, -fallback-premium combiné avec -network-premium, et un ciblage plus précis lorsqu'un fallback est activé. Le port ne gère que CONNECT, donc un client qui transmet une requête http:// simple au lieu de la tunneler reçoit un code 405 (curl la tunnele avec --proxytunnel). Enfin, un navigateur piloté via le port doit toujours comporter un nom de session, car le chargement d'une seule page ouvre des dizaines de connexions.
Plusieurs workers, chacun sur sa propre adresse ? Donnez à chacun son propre nom de session :
import requests
TEMPLATE = "http://USERNAME-country-de-session-{name}:PASSWORD@proxy.foura.ai:34004"
def worker_session(name):
proxy = TEMPLATE.format(name=name)
s = requests.Session()
s.proxies = {"http": proxy, "https": proxy}
return s
workers = [worker_session(f"w{i}") for i in range(4)]
print(workers[0].get("https://example.com").status_code)
Le Dashboard fait de même à grande échelle : activez Sticky, définissez la quantité, et l'onglet Connection string affiche une ligne par adresse, sous forme d'URL ou au format host:port:user:pass pour les gestionnaires de proxy. Un refus inattendu ? Ajoutez -sv à votre appel curl et redirigez vers 2>&1 | grep -i x-foura-error. Chaque option est détaillée dans la référence des ports de proxy, et la partie Dashboard dans Proxy Users.
Prochaines étapes
Le premier client que nous avons conçu autour des proxy users est le nôtre. L'extension FourA pour Chrome route votre navigateur via l'un d'eux : choisissez le réseau et le pays, basculez l'interrupteur, et une ligne d'état indique l'adresse vue par les sites. Il s'agit d'une version bêta, absente du Chrome Web Store, à installer via Outils dans le Dashboard en mode développeur. Plus tard, la facturation par organisation rejoindra la roadmap publique, un point essentiel puisque le proxy user d'une organisation facture aujourd'hui son propriétaire actuel.
Une URL de proxy constitue le plus ancien contrat d'intégration existant, compatible nativement avec tous vos outils. L'enjeu technique n'a jamais été le tunnel. Il réside dans la sémantique acceptée par la chaîne de connexion en amont, et dans ce qui survient lorsque vous commettez une erreur.