Sans KYC — pas d’ID, pas de selfie, pas de documents. Payer en crypto : BTC, USDT, USDC, ETH, SOL, LTC
Langue: Français
Commencez

Référence d’erreur proxy · Codes d'état HTTP

407 Proxy Authentication Required : ce que cela signifie et comment le corriger

Code d'état HTTP (4xx, erreur client) : message exact dans chaque outil, causes probables par ordre, et solution efficace.

Dernière mise à jour: · 6 min de lecture

Réponse rapide

Que signifie 407 Proxy Authentication Required avec un proxy ?

407 Proxy Authentication Required signifie que le proxy a refusé votre requête car il n'a reçu aucun identifiant ou des identifiants incorrects. Le site cible n'a jamais été contacté. Avec les proxies résidentiels CrawlRelay, vérifiez trois points : que le nom d'utilisateur est celui affiché dans votre tableau de bord, que le mot de passe correspond, et que tout caractère spécial dans l'un ou l'autre est encodé en URL. Retenter la même requête ne corrige jamais une 407.

407 Proxy Authentication Required en un coup d'œil

Erreur407 Proxy Authentication Required
TypeCode d'état HTTP (4xx, erreur client)
Envoyé parLa passerelle proxy, jamais le site cible
Défini dansRFC 9110, section 15.5.8 (headers: Proxy-Authenticate 11.7.1, Proxy-Authorization 11.7.2)
Réessayer ?Non. Les mêmes identifiants échouent à nouveau ; corrigez-les d'abord
Vérification initialeExécutez le test curl ci-dessous avec uniquement le nom d'utilisateur et sans paramètres de ciblage

Que signifie 407 Proxy Authentication Required ?

Une 407 provient du proxy, pas du site que vous souhaitez atteindre. La RFC 9110 la décrit comme la version proxy du 401 : le client doit s'authentifier auprès du proxy avant toute autre action. Le proxy envoie un en-tête Proxy-Authenticate indiquant le schéma accepté, presque toujours Basic. Votre client répond avec un en-tête Proxy-Authorization qui porte username:password encodé en Base64.

Pour une cible HTTPS, la 407 arrive en réponse à la requête CONNECT qui ouvre le tunnel. C’est pourquoi de nombreuses bibliothèques la rapportent comme une erreur de tunnel ou de connexion et non comme un statut HTTP : la session TLS avec le site n’a jamais commencé.

À quoi ressemble a 407 en Python, curl, Node.js et navigateurs ?

La même erreur s'affiche différemment selon chaque outil. Voici les messages à rechercher dans vos logs :

  • Python requests : ProxyError('Unable to connect to proxy', OSError('Tunnel connection failed: 407 Proxy Authentication Required'))
  • curl : curl: (56) CONNECT tunnel failed, response 407
  • Scrapy : TunnelError: Could not open CONNECT tunnel with proxy ... [{'status': 407, 'reason': b'Proxy Authentication Required'}]
  • Chrome, Playwright, Puppeteer : net::ERR_TUNNEL_CONNECTION_FAILED, ou une fenêtre de connexion dans un navigateur visible
  • Clients Node.js sur une cible http:// : Request failed with status code 407

Quelles sont les causes de a 407 ?

Probablement en premier lieu :

  • Nom d'utilisateur ou mot de passe incorrect. Une faute de frappe, un ancien mot de passe après réinitialisation, ou les identifiants d'un autre sous-utilisateur.
  • Caractères spéciaux non encodés. Un mot de passe contenant @, :, / ou # casse l’URL user:pass@host. Encodez-le en pourcentage : @ devient %40, : devient %3A.
  • Suffixe de ciblage erroné. Les passerelles qui lisent le ciblage depuis le nom d’utilisateur voient un nom trop long. Une faute dans une clé ou un code pays le transforme en un nom que le proxy ne connaît pas.
  • Identifiants qui ne quittent jamais votre code. Chrome ignore un nom d’utilisateur et mot de passe écrits dans --proxy-server. Puppeteer nécessite page.authenticate(), et Selenium un forwarder local.
  • Solde vide. Vérifiez que votre compte a encore du trafic avant de déboguer votre code.

Comment diagnostiquer a 407 étape par étape ?

  1. Testez les identifiants avec curl sans ciblage du tout (commande ci-dessous). Une ligne HTTP/1.1 407 dans la sortie verbose confirme un problème d’identifiants.
  2. Rajoutez vos paramètres de ciblage un par un, en relançant le test à chaque fois.
  3. Enregistrez l’URL proxy que votre programme construit réellement, avec le mot de passe masqué, et comparez-la caractère par caractère au tableau de bord.
  4. Si curl réussit et que votre programme échoue, la bibliothèque n’envoie pas les identifiants. Lisez la solution pour votre outil ci-dessous.
Tester l'URL en échec avec curl (port HTTP, mode verbeux)
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL

# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URL

Comment résoudre a 407 ?

  • Encodez les identifiants avec urllib.parse.quote(value, safe='') en Python ou encodeURIComponent() en JavaScript avant de construire l’URL.
  • Navigateurs : passez username et password dans l’option proxy de Playwright, appelez page.authenticate() dans Puppeteer, et utilisez un forwarder local pour Selenium. Voir les guides Playwright et Puppeteer.
  • Variables d’environnement : si vous réglez HTTPS_PROXY, quotez toute la valeur dans votre shell afin que @ et $ soient conservés.
  • Changez le mot de passe dans le tableau de bord si vous suspectez une fuite, puis mettez à jour chaque scraper qui l’utilise.
Python : construire l'URL du proxy avec des identifiants encodés
from urllib.parse import quote

import requests

user = "USERNAME-country-us"
password = "p@ss:word/1"  # example containing special characters

# safe="" also encodes "/", "@" and ":" inside the credentials
proxy = "http://{}:{}@gw.crawlrelay.com:7777".format(
    quote(user, safe=""), quote(password, safe="")
)
proxies = {"http": proxy, "https": proxy}  # http:// for both keys

r = requests.get("https://api.ipify.org", proxies=proxies, timeout=(10, 30))
print(r.status_code, r.text)
Playwright (Python) : identifiants en champs séparés
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(proxy={
        "server": "http://gw.crawlrelay.com:7777",
        "username": "USERNAME-country-us",
        "password": "PASSWORD",
    })
    page = browser.new_page()
    response = page.goto("https://api.ipify.org")
    print(response.status, page.inner_text("body"))
    browser.close()

Dois-je réessayer après a 407 ?

Ne retentez pas une 407 automatiquement. Une nouvelle tentative avec les mêmes identifiants renvoie la même réponse, et une boucle serrée ne fait que remplir vos logs. Considérez la 407 comme une erreur de configuration : stoppez la tâche, corrigez les identifiants, et relancez. Si une 407 survient soudainement dans une tâche fonctionnant depuis plusieurs jours, le mot de passe a probablement été changé ou le sous-utilisateur désactivé.

Quelle est l'incidence de 407 Proxy Authentication Required sur CrawlRelay ?

La passerelle CrawlRelay lit le nom d’utilisateur et le mot de passe à chaque nouvelle connexion. Le ciblage et les paramètres de session résident dans le nom d’utilisateur, donc un mot de passe valide peut quand même échouer si le suffixe est mal formé. Construisez le nom d’utilisateur dans une fonction dédiée et enregistrez sa sortie une fois au démarrage. La page de démarrage rapide montre le format exact.

Passerelle : gw.crawlrelay.com, port 7777 (HTTP, HTTPS via CONNECT) et port 7778 (SOCKS5). Format du nom d'utilisateur : USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Voir aussi : 401 vs 407 · ERR_TUNNEL_CONNECTION_FAILED · Impossible de se connecter au proxy.

407 Proxy Authentication Required : questions fréquentes des développeurs

Une 407 est-elle envoyée par le site que je scrape ?

Non. Une 407 est toujours envoyée par un proxy situé entre vous et le site web. La requête n’a jamais atteint le site, il ne peut donc ni voir votre trafic, ni le compter, ni vous bloquer à cause de lui. Si le site voulait un login, il répondrait 401 à la place. Corrigez les identifiants du proxy et la 407 disparaît.

Pourquoi mon code reçoit-il une 407 alors que curl fonctionne avec le même proxy ?

Votre bibliothèque n’envoie pas les identifiants, ou les envoie sous une forme différente. Les causes habituelles sont les identifiants tapés dans un flag du navigateur qui les ignore, une variable d’environnement qui a perdu ses caractères spéciaux, ou un mot de passe non encodé en URL. Affichez l’URL proxy construite par votre code, avec le mot de passe masqué, et comparez-la à la commande curl.

Une 407 consomme-t-elle du trafic de mon forfait ?

Une réponse 407 fait quelques centaines d’octets et la requête n’atteint jamais la cible, donc aucune page n’est téléchargée. Le coût est ailleurs : un scraper coincé dans une boucle de retry 407 gaspille du temps et remplit vos logs. Faites d’une 407 un arrêt franc dans votre gestion d’erreur.

Autres erreurs de proxy dans cette référence

Codes d'état HTTP

Erreurs du navigateur et du client

Erreurs de connexion et TLS

Proxies résidentiels avec documentation couvrant les cas de défaillance

Proxies résidentiels CrawlRelay de 0,50 $US/GB, trafic sans expiration.

À partir de 0,50 $US/GB · sans KYC

Commencez