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

> HTTP 407 Proxy Authentication Required signifie que le proxy a rejeté ou n'a jamais reçu vos identifiants. Messages d'erreur précis en Python, curl, Node, et solutions.

- URL: https://crawlrelay.com/fr/docs/errors/407-proxy-authentication-required/
- Dernière mise à jour: 2026-10-13
- Publisher: CrawlRelay (https://crawlrelay.com)

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

**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

| Attribut | Valeur |
| --- | --- |
| Erreur | 407 Proxy Authentication Required |
| Type | Code d'état HTTP (4xx, erreur client) |
| Envoyé par | La passerelle proxy, jamais le site cible |
| Défini dans | RFC 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 initiale | Exé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)*

```bash
# 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:PASSWORD@gw.crawlrelay.com: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](https://crawlrelay.com/fr/docs/playwright/) et [Puppeteer](https://crawlrelay.com/fr/docs/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*

```python
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*

```python
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](https://crawlrelay.com/fr/docs/) 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](https://crawlrelay.com/fr/docs/errors/401-unauthorized/) · [ERR_TUNNEL_CONNECTION_FAILED](https://crawlrelay.com/fr/docs/errors/err-tunnel-connection-failed/) · [Impossible de se connecter au proxy](https://crawlrelay.com/fr/docs/errors/cannot-connect-to-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

- [401 Unauthorized vs 407](https://crawlrelay.com/fr/docs/errors/401-unauthorized/)
- [403 Forbidden](https://crawlrelay.com/fr/docs/errors/403-forbidden/)
- [407 Proxy Authentication Required](https://crawlrelay.com/fr/docs/errors/407-proxy-authentication-required/)
- [429 Too Many Requests](https://crawlrelay.com/fr/docs/errors/429-too-many-requests/)
- [502 Bad Gateway](https://crawlrelay.com/fr/docs/errors/502-bad-gateway/)
- [503 Service Unavailable](https://crawlrelay.com/fr/docs/errors/503-service-unavailable/)
- [504 Gateway Timeout](https://crawlrelay.com/fr/docs/errors/504-gateway-timeout/)
- [Cannot connect to proxy (ProxyError)](https://crawlrelay.com/fr/docs/errors/cannot-connect-to-proxy/)
- [Connection reset by peer (ECONNRESET)](https://crawlrelay.com/fr/docs/errors/connection-reset/)
- [ERR_PROXY_CONNECTION_FAILED](https://crawlrelay.com/fr/docs/errors/err-proxy-connection-failed/)
- [ERR_TUNNEL_CONNECTION_FAILED](https://crawlrelay.com/fr/docs/errors/err-tunnel-connection-failed/)
- [Read timed out (ReadTimeout)](https://crawlrelay.com/fr/docs/errors/read-timeout/)
- [SOCKS5 proxy errors](https://crawlrelay.com/fr/docs/errors/socks5-proxy-errors/)
- [SSL: CERTIFICATE_VERIFY_FAILED](https://crawlrelay.com/fr/docs/errors/ssl-certificate-verify-failed/)
- [SSL: WRONG_VERSION_NUMBER](https://crawlrelay.com/fr/docs/errors/ssl-wrong-version-number/)

**Proxies résidentiels avec documentation couvrant les cas de défaillance** Proxies résidentiels CrawlRelay de 0,50 $US/GB, trafic sans expiration. [Voir les tarifs](https://crawlrelay.com/fr/pricing/) · [Démarrage rapide](https://crawlrelay.com/fr/docs/)

---

CrawlRelay: CrawlRelay est un service de proxy résidentiel rotatif et proxy mobile 4G/5G pour développeurs, adapté aux scrapers et pipelines de données IA : trafic prépayé sans expiration à partir de 0,50 $US/GB, paiement en crypto, sans téléchargement d’ID. Sans KYC — pas d’ID, pas de selfie, pas de documents. Payer en crypto.
