Un proxy, c’est cinq informations : un schéma, un nom d’utilisateur, un mot de passe, un hôte et un port. Les fournisseurs, les outils et les forums disposent ces éléments dans des ordres différents, et un proxy qui fonctionne dans un outil échoue dans un autre simplement parce qu’il a été collé sous la mauvaise forme. Ce guide présente les formats courants, quels outils attendent lesquels, et comment éviter les erreurs que nous observons le plus souvent avec les proxies résidentiels.
Les cinq formats courants
Voici le même proxy Shifter sous les cinq formats que le Proxy Generator de notre dashboard peut produire. Le nom d’utilisateur porte le ciblage et la session, il est donc plus long qu’on pourrait s’y attendre.
| Format | Exemple |
|---|---|
scheme://user:pass@host:port | http://customer-USERNAME-sid-a1-ttl-60:PASSWORD@p.shifter.io:443 |
user:pass@host:port | customer-USERNAME-sid-a1-ttl-60:PASSWORD@p.shifter.io:443 |
host:port:user:pass | p.shifter.io:443:customer-USERNAME-sid-a1-ttl-60:PASSWORD |
user:pass:host:port | customer-USERNAME-sid-a1-ttl-60:PASSWORD:p.shifter.io:443 |
host:port@user:pass | p.shifter.io:443@customer-USERNAME-sid-a1-ttl-60:PASSWORD |
Le premier est une véritable URL, définie par les standards du web, et c’est le choix le plus sûr chaque fois qu’un outil l’accepte. Les autres sont des conventions. Elles existent parce que de nombreux outils de traitement en masse importent des listes en texte brut, un proxy par ligne, et chaque outil a choisi son propre ordre.
Quels outils attendent quels formats
curl. Passez la forme URL à -x. Si vous omettez le schéma, curl suppose http://. Vous pouvez aussi garder les identifiants séparés avec -U username:password, ce qui évite les problèmes d’encodage. Notre guide sur la configuration de curl et Postman contient des exemples complets.
Python requests et Scrapy. Les deux acceptent la forme URL. Dans requests, les clés du dictionnaire nomment le schéma du site web, et les valeurs nomment le proxy, donc les deux pointent généralement vers un proxy http:// :
proxy = "http://customer-USERNAME:PASSWORD@p.shifter.io:443"
proxies = {"http": proxy, "https": proxy}
Playwright. Prend les éléments comme des champs séparés : server avec le schéma, l’hôte et le port, plus username et password. Les séparer vous-même évite tout problème d’encodage.
Puppeteer et Chrome. Le flag --proxy-server prend uniquement l’hôte et le port. Les identifiants passent par page.authenticate().
Gestionnaires de profils de navigateur et outils de traitement en masse. Beaucoup importent des listes au format host:port:user:pass, et certains demandent quel ordre votre liste utilise. Vérifiez l’écran d’importation avant de coller quelques centaines de lignes.
Le schéma décrit le proxy, pas le site web
C’est l’erreur la plus courante que nous observons. Un client qui scrape des sites HTTPS écrit https:// devant le proxy, et chaque requête échoue avec une erreur TLS.
Le schéma indique à votre client comment parler au proxy. Un site HTTPS est atteint via un proxy http:// avec la méthode CONNECT : le client demande au proxy d’ouvrir un tunnel, puis exécute TLS avec le site web à travers celui-ci. La connexion au site web reste chiffrée de bout en bout. Écrire https://p.shifter.io:443 demande au client de démarrer TLS avec la passerelle elle-même, et notre passerelle ne propose pas cela, donc la négociation échoue. Utilisez http:// aussi bien pour les sites HTTP que HTTPS, ou socks5:// si votre outil préfère SOCKS.
Avec SOCKS, il y a un second choix. socks5:// résout le nom du site web sur votre machine, tandis que socks5h:// envoie le nom au proxy pour qu’il le résolve. Si vous vous souciez de l’endroit où se font les résolutions DNS, lisez notre guide sur comment prévenir les fuites DNS.
Les caractères spéciaux cassent les formats
Chaque format réserve certains caractères.
- Forme URL :
@,:,/,#,?et%dans un nom d’utilisateur ou un mot de passe doivent être encodés en pourcentage. Un mot de passe commep@ss:worddevientp%40ss%3Aword. - Formes séparées par deux-points : un deux-points dans le mot de passe décale chaque champ qui le suit, donc l’outil lit le mauvais hôte ou le mauvais port.
Les parties ciblage et session d’un nom d’utilisateur Shifter n’utilisent que des lettres, des chiffres, des tirets et des underscores, par exemple city-new_york, elles sont donc sûres dans tous les formats. Si vous définissez un mot de passe avec des symboles, la forme URL avec encodage, ou un outil avec des champs séparés, est la voie la plus fiable.
Convertir entre les formats
Quand un outil vous donne un format et que votre code en veut un autre, convertissez la liste plutôt que d’éditer les lignes à la main. Cette fonction Python transforme n’importe lequel des cinq formats en forme URL et encode les identifiants :
from urllib.parse import quote
def to_proxy_url(line: str, scheme: str = "http") -> str:
line = line.strip()
if "://" in line:
return line
if "@" in line:
left, right = line.split("@", 1)
if left.rsplit(":", 1)[-1].isdigit():
hostport, creds = left, right # host:port@user:pass
else:
creds, hostport = left, right # user:pass@host:port
user, password = creds.split(":", 1)
host, port = hostport.rsplit(":", 1)
else:
parts = line.split(":")
if len(parts) != 4:
raise ValueError(f"unrecognised proxy line: {line}")
if parts[1].isdigit():
host, port, user, password = parts # host:port:user:pass
else:
user, password, host, port = parts # user:pass:host:port
return f"{scheme}://{quote(user, safe='')}:{quote(password, safe='')}@{host}:{port}"
print(to_proxy_url("p.shifter.io:443:customer-USERNAME:PASSWORD"))
# http://customer-USERNAME:PASSWORD@p.shifter.io:443
Elle détermine l’ordre en trouvant le numéro de port, donc elle ne peut pas distinguer les formats quand un nom d’utilisateur ou un mot de passe est entièrement numérique. Dans ce cas, demandez à la personne qui vous a fourni la liste quel ordre elle utilise.
Les proxies ISP utilisent les mêmes formats
Les proxies ISP suivent les mêmes règles avec un hôte différent. Chaque proxy ISP se connecte via isp.shifter.io:443, donc une ligne au format host:port:user:pass s’écrit isp.shifter.io:443:USERNAME:PASSWORD. Chaque proxy est distingué par son nom d’utilisateur, et non par une IP et un port séparés par proxy, ce qui surprend les personnes habituées aux listes de type ip:port:user:pass.
Vérifications rapides quand un proxy ne se connecte pas
- 407 Proxy Authentication Required : le proxy a été atteint mais les identifiants n’ont pas été acceptés. Vérifiez un nom d’utilisateur et un mot de passe manquants ou inversés, ou un symbole non encodé. Notre guide de dépannage des erreurs 407 couvre le reste.
- Erreurs TLS ou de négociation immédiates : vous avez probablement écrit
https://devant le proxy. Remplacez-le parhttp://. - Connexion refusée ou délais dépassés sur chaque requête : l’hôte ou le port est incorrect, souvent parce qu’une ligne séparée par des deux-points a été lue dans le mauvais ordre.
- Fonctionne dans curl, échoue dans votre outil : l’outil attend un format différent. Convertissez la ligne, ou saisissez les champs séparément.
Dans le dashboard, le Proxy Generator vous permet de choisir le protocole et le format avant de copier, et il télécharge une liste entière au format CSV dans le même format. Choisir le bon format dès le départ évite la plupart de ces erreurs.
Sources et références
- RFC 3986, Uniform Resource Identifier: Generic Syntax : rfc-editor.org
- curl, l’option —proxy : curl.se
- Requests, proxies : requests.readthedocs.io
- Playwright, proxy HTTP : playwright.dev