Retour au blog
Guides
Suciu DanLast updated on May 1, 202612 min read

Comment configurer le proxy Axios dans Node.js : Auth, Rotation, SOCKS5

Comment configurer le proxy Axios dans Node.js : Auth, Rotation, SOCKS5
En bref : Axios achemine les requêtes via un proxy en acceptant un proxy objet contenant host, portet des champs auth . Ce guide explique comment configurer Axios pour utiliser un proxy à partir de zéro : câblage de base, proxys authentifiés, tunneling HTTPS, système de rotation utilisant des intercepteurs, SOCKS5 via socks-proxy-agent, et le diagnostic des erreurs courantes. Chaque extrait de code est du code Node.js prêt à être copié-collé.

Si vous devez acheminer le trafic HTTP via un serveur intermédiaire dans Node.js, comprendre comment configurer correctement le proxy Axios est la première étape. Axios est l’un des clients HTTP les plus utilisés dans l’écosystème Node.js, offrant des requêtes basées sur des promesses et une API de configuration épurée. Contrairement à de nombreuses autres bibliothèques HTTP, il expose un proxy dans sa configuration de requête plutôt que de s'appuyer sur des variables d'environnement ou des astuces de chaînes d'URL.

Cet article n'est pas une introduction au concept de proxy. Vous savez déjà ce que font les proxys. Nous allons plutôt nous plonger directement dans la mise en œuvre spécifique à Axios : la configuration minimale d'un proxy Node.js en trois lignes, les proxys authentifiés, les mécanismes de tunneling HTTPS, un modèle de rotation de niveau production utilisant des intercepteurs, la prise en charge des proxys SOCKS5, le contournement sélectif de proxy et une référence de dépannage. Tous les exemples de proxy Axios présentés ici ciblent Node.js et sont conçus pour fonctionner tels quels après un npm install.

Guide de démarrage rapide : un proxy Axios minimal en trois lignes

Le moyen le plus rapide d'obtenir un proxy HTTP Axios fonctionnel consiste à passer un proxy directement dans une requête GET. Voici le strict minimum dont vous avez besoin :

const axios = require('axios');

axios.get('https://httpbin.org/ip', {
  proxy: { host: '123.45.67.89', port: 8080 }
}).then(res => console.log(res.data));

Exécutez node app.js et vérifiez le champ origin renvoyée. Si elle affiche l'adresse IP du proxy au lieu de l'adresse réelle de votre machine, la configuration fonctionne. Ce simple proxy clé est ce qui distingue une requête directe d'une requête via un proxy, et tout le reste de ce guide sur la configuration des connexions proxy Axios s'appuie sur elle.

Comment configurer le proxy Axios

Le proxy champ de la configuration d'une requête Axios accepte plusieurs propriétés : host (chaîne de caractères, obligatoire), port (nombre, obligatoire), protocol (valeur par défaut http) et un auth que nous aborderons dans la section suivante. Contrairement aux bibliothèques qui analysent une chaîne d'URL de proxy, Axios conserve ces éléments sous forme de champs distincts, ce qui simplifie la configuration programmatique du proxy Axios.

Configuration par requête ou au niveau de l'instance

Vous disposez de deux méthodes pour configurer un proxy dans les projets Axios Node.js : en ligne à chaque appel, ou intégrée à une instance réutilisable via axios.create().

Approche

Quand l'utiliser

Exemple de scénario

Par requête (axios.get(url, { proxy }))

Vous alternez les proxys à chaque requête ou avez besoin de proxys différents pour différents points de terminaison

Scraping de plusieurs sites soumis à des restrictions géographiques

Au niveau de l'instance (axios.create({ proxy }))

Un seul proxy pour toute la session, ou vous souhaitez une valeur par défaut propre que les appels individuels peuvent remplacer

Proxy de redirection d'entreprise, environnement de staging

Un proxy au niveau de l'instance permet toujours des remplacements par requête. Si vous transmettez proxy la configuration d'un appel individuel, celle-ci prévaut sur la valeur par défaut de l'instance. Pour désactiver le proxy pour un appel spécifique sur une instance qui en possède un, passez proxy: false explicitement. Cette flexibilité au niveau de chaque requête est l'un des atouts qui justifie d'apprendre à configurer les modèles de proxy Axios.

Ajout de l'authentification du proxy

La plupart des proxys commerciaux nécessitent des identifiants. Axios gère cela via un auth objet imbriqué à l'intérieur proxy, ce qui simplifie l'authentification du proxy Axios :

const axios = require('axios');

const client = axios.create({
  proxy: {
    host: process.env.PROXY_HOST,
    port: Number(process.env.PROXY_PORT),
    auth: {
      username: process.env.PROXY_USER,
      password: process.env.PROXY_PASS
    }
  }
});

client.get('https://httpbin.org/ip')
  .then(res => console.log(res.data))
  .catch(err => console.error(err.message));

Quelques remarques pratiques :

  • Enregistrez les identifiants dans des variables d'environnement, et non dans le code source. Un .env fichier chargé avec dotenv fonctionne bien pendant le développement.
  • Les caractères spéciaux dans les mots de passe (comme @, #, ou %) sont sans danger à l'intérieur de l' auth car Axios ne les encode pas en URL comme le ferait une chaîne d'URL de proxy. C'est l'un des avantages de l'approche de configuration structurée.
  • Si votre proxy rejette les identifiants, vous recevrez un statut 407 Proxy Authentication Required. Vérifiez à nouveau le nom d'utilisateur et le mot de passe, et assurez-vous que votre fournisseur de proxy n'a pas expiré les identifiants.

Proxys HTTPS et tunnel CONNECT

Lorsque votre URL cible est en HTTPS, Axios ne transmet pas la requête via le proxy en texte clair. À la place, il envoie une requête HTTP CONNECT au proxy, lui demandant d'ouvrir un tunnel TCP brut vers la destination. Une fois le tunnel établi, la poignée de main TLS s'effectue de bout en bout entre votre processus Node.js et le serveur cible. Le proxy relaie les octets chiffrés sans pouvoir les lire ni les modifier.

Cela est important pour deux raisons. Premièrement, vos données extraites restent confidentielles même si le proxy est géré par un tiers. Deuxièmement, le site cible voit une connexion TLS légitime, ce qui rend vos requêtes plus naturelles par rapport au HTTP en clair. Axios gère automatiquement ce tunneling lorsque vous configurez un proxy pour une URL cible HTTPS (voir la documentation Node.js sur le HTTPS), vous n'avez donc pas besoin de code supplémentaire de votre côté. Sachez simplement que le proxy lui-même doit uniquement prendre en charge la méthode CONNECT, ce que font pratiquement tous les proxys HTTP modernes.

Mise en place d'un système de rotation de proxys

Une seule adresse IP de proxy sera rapidement signalée si vous envoyez des centaines de requêtes vers le même site. La rotation des proxys répartit votre trafic sur plusieurs adresses IP, de sorte que le site cible perçoit ce qui ressemble à de nombreux visiteurs différents. La création d'un pool de proxys dans les projets Axios Node.js nécessite une classe de pool et une gestion des proxys inactifs.

Voici un pool round-robin minimal qui suit les proxys défaillants :

class ProxyPool {
  constructor(proxies) {
    this.proxies = proxies.map(p => ({ ...p, alive: true }));
    this.index = 0;
  }

  next() {
    const alive = this.proxies.filter(p => p.alive);
    if (!alive.length) throw new Error('All proxies dead');
    const proxy = alive[this.index % alive.length];
    this.index++;
    return { host: proxy.host, port: proxy.port, auth: proxy.auth };
  }

  markDead(host, port) {
    const p = this.proxies.find(
      px => px.host === host && px.port === port
    );
    if (p) p.alive = false;
  }
}

Utilisez le pool avec Axios comme suit :

const pool = new ProxyPool([
  { host: '1.2.3.4', port: 8080, auth: { username: 'u1', password: 'p1' } },
  { host: '5.6.7.8', port: 8080, auth: { username: 'u2', password: 'p2' } },
  { host: '9.10.11.12', port: 3128 }
]);

async function fetchWithRotation(url) {
  const proxy = pool.next();
  try {
    const res = await axios.get(url, { proxy, timeout: 10000 });
    return res.data;
  } catch (err) {
    pool.markDead(proxy.host, proxy.port);
    return fetchWithRotation(url); // retry with next proxy
  }
}

Définir un timeout (en millisecondes) est essentiel. Certains proxys restent bloqués indéfiniment au lieu de renvoyer une erreur, et sans délai d'expiration, votre script se bloquera. Dix secondes constituent un point de départ raisonnable pour la plupart des tâches de scraping. Si vous souhaitez en savoir plus sur la manière d'éviter les blocages pendant le scraping, il est utile de consulter les conseils pour prévenir les interdictions d'IP.

Changement automatique de proxy avec les intercepteurs Axios

La logique de rotation ci-dessus réside dans la fonction appelante. Une approche plus propre consiste à utiliser les intercepteurs de réponse Axios pour basculer automatiquement de proxy lorsque la cible renvoie un 403 ou un 429, supprimant ainsi le code de réessai manuel de chaque point d'appel :

const client = axios.create({ timeout: 10000 });

client.interceptors.request.use(config => {
  config.proxy = pool.next();
  return config;
});

client.interceptors.response.use(
  response => response,
  async error => {
    const { config } = error;
    const status = error.response?.status;
    if ((status === 403 || status === 429) && !config._retried) {
      config._retried = true;
      pool.markDead(config.proxy.host, config.proxy.port);
      config.proxy = pool.next();
      return client.request(config);
    }
    return Promise.reject(error);
  }
);

L'intercepteur de requête attribue un nouveau proxy avant chaque appel sortant. L'intercepteur de réponse détecte les signaux de blocage et effectue une nouvelle tentative avec une adresse IP différente une fois par requête (le drapeau _retried drapeau empêche les boucles infinies). Cette approche basée sur les intercepteurs est un exemple puissant d'utilisation des proxys Axios pour les systèmes de production, et vous pouvez changer de stratégie de rotation sans toucher aux points d'appel.

Utilisation des proxys SOCKS5 avec Axios

L'option intégrée d'Axios proxy ne prend en charge que les proxys HTTP et HTTPS. Si vous avez besoin d'un proxy SOCKS5 avec Axios (qui fonctionne à une couche réseau inférieure et prend en charge UDP ainsi que TCP), vous avez besoin du socks-proxy-agent package.

Installez-le avec Axios :

npm install axios socks-proxy-agent

Créez ensuite un agent et transmettez-le via httpAgent et httpsAgent:

const axios = require('axios');
const { SocksProxyAgent } = require('socks-proxy-agent');

const agent = new SocksProxyAgent('socks5://user:pass@127.0.0.1:1080');

axios.get('https://httpbin.org/ip', {
  httpAgent: agent,
  httpsAgent: agent,
  proxy: false  // disable built-in proxy so the agent handles routing
})
.then(res => console.log('SOCKS5 IP:', res.data.origin))
.catch(err => console.error(err.message));

Notez la proxy: false à la ligne 8. Ceci est essentiel lors de la configuration d'un proxy SOCKS5 avec Axios. Si vous laissez le proxy intégré activé en même temps qu'un agent personnalisé, ils entreront en conflit. La configuration proxy: false indique à Axios de confier tout le routage de connexion à votre agent SOCKS.

Variables d'environnement et contournement sélectif

Une piège courant lors de l'apprentissage de la configuration des connexions proxy Axios : Axios ne lit pas automatiquement HTTP_PROXY ni HTTPS_PROXY les variables d'environnement comme le font des outils tels que curl . Si vous définissez ces variables en espérant qu'Axios les détecte, rien ne se passera. Vous devez les lire vous-même et les injecter dans la configuration :

const proxy = process.env.HTTP_PROXY
  ? { host: new URL(process.env.HTTP_PROXY).hostname,
      port: Number(new URL(process.env.HTTP_PROXY).port) }
  : undefined;

const res = await axios.get('https://example.com', { proxy });

Pour désactiver le proxy de manière sélective pour certaines requêtes (par exemple, les appels vers des API internes qui ne doivent pas quitter votre réseau), passez proxy: false sur ces requêtes individuelles. Cela est utile lorsque vous avez défini un proxy au niveau de l'instance via axios.create() mais que vous devez le contourner pour les vérifications de santé, les appels vers localhost ou les requêtes vers des API publiques pour développeurs où un proxy ne fait qu'ajouter de la latence sans apporter aucun avantage.

Quand les proxys simples ne suffisent pas

Changer d'adresse IP vous permet de contourner les limites de débit les plus simples, mais les systèmes anti-bot sophistiqués examinent bien plus que votre adresse IP source. Selon des études du secteur, les plateformes modernes de détection de bots analyseraient les schémas de timing des requêtes, les empreintes TLS, la cohérence des en-têtes et les signaux comportementaux tels que les mouvements de souris ou la profondeur de défilement. Se contenter de faire tourner une liste d'adresses IP de centres de données ne trompera pas ces systèmes.

Si vous avez déjà appris à configurer la rotation de proxys Axios et que vous êtes toujours bloqué, envisagez ces mesures supplémentaires :

  • En-têtes HTTP réalistes : alternez les User-Agent chaînes et incluez des en-têtes tels que Accept-Language et Referer que n'enverrait un vrai navigateur. L'utilisation stratégique des en-têtes Axios aide à éviter la détection.
  • Diversité des empreintes TLS : Node.js produit une empreinte TLS distinctive. Les outils qui émulent le comportement TLS d'un navigateur peuvent réduire votre surface de détection.
  • Réseaux de proxys résidentiels : ceux-ci acheminent le trafic via de véritables adresses IP domestiques, rendant les requêtes pratiquement impossibles à distinguer du trafic utilisateur habituel. Ils coûtent plus cher que les proxys de centre de données, mais sont bien plus efficaces contre les systèmes de détection agressifs.

Dépannage des erreurs de proxy courantes

Même une configuration de proxy Axios correcte peut échouer lors de l'exécution. Voici les erreurs que vous rencontrerez le plus souvent et comment y remédier :

  • ECONNREFUSED : Axios ne parvient pas du tout à atteindre le proxy. Vérifiez le host et port , assurez-vous que le serveur proxy est en cours d'exécution et vérifiez qu'aucun pare-feu ne bloque la connexion.
  • 407 Proxy Authentication Required : le proxy a rejeté vos identifiants. Vérifiez votre auth.username et auth.password sont correctes, et vérifiez si votre fournisseur a mis à jour ou si les identifiants ont expiré.
  • Délais d'attente et requêtes bloquées : certains proxys acceptent la connexion mais ne répondent jamais. Définissez toujours une timeout dans votre configuration Axios afin que votre script échoue rapidement. Une compréhension approfondie des erreurs d'état de proxy peut vous faire gagner des heures de débogage.
  • Conflits VPN : l'utilisation d'un VPN tout en passant par un proxy peut entraîner des comportements inattendus, notamment un trafic empruntant un mauvais chemin ou des connexions qui échouent complètement. Ajouter un proxy par-dessus un VPN est généralement superflu, sauf si vous avez spécifiquement besoin d'une rotation d'IP dans une autre zone géographique.
  • X-Forwarded-For Divulgation de votre adresse IP réelle : certains proxys ajoutent votre adresse IP d'origine à cet en-tête. Les proxys « Elite » ou à haut niveau d'anonymat la suppriment ; vérifiez donc le niveau d'anonymat de votre proxy si la dissimulation de l'adresse IP est importante.

Points clés

  • La manière la plus simple de configurer un proxy Axios consiste à passer un proxy objet avec host et port dans n'importe quelle configuration de requête. L'authentification ajoute un auth sous-objet avec username et password.
  • Utilisez axios.create() pour un proxy à l'échelle de la session, et le remplacer par proxy ou proxy: false lorsque vous avez besoin de flexibilité.
  • Pour le scraping en production, créez un pool de proxys et intégrez-le aux intercepteurs Axios afin que la logique de réessai reste hors de votre code métier.
  • Les proxys SOCKS5 nécessitent socks-proxy-agent transmis via httpAgent/httpsAgent, avec le proxy réglé sur false.
  • Toujours définir un timeout sur les requêtes proxy. Les proxys bloqués bloqueront silencieusement l'ensemble de votre pipeline.

FAQ

Axios prend-il en charge les proxys SOCKS5 de manière native ?

Non. L'objet proxy ne gère que les proxys HTTP et HTTPS. Pour SOCKS5, installez le socks-proxy-agent paquet et transmettez l'agent obtenu à httpAgent et httpsAgent dans la configuration de la requête. Définissez proxy: false pour éviter les conflits avec le gestionnaire de proxy intégré.

Comment désactiver le proxy pour une seule requête Axios ?

Transmettez proxy: false dans la configuration de la requête pour cet appel spécifique. Cela remplace tout proxy défini au niveau de l'instance via axios.create(). Cela est utile pour les requêtes vers des services internes ou des points de terminaison localhost qui ne doivent pas passer par le proxy.

Pourquoi Axios ignore-t-il mes paramètres de proxy lorsque des variables d'environnement sont définies ?

Axios ne lit pas automatiquement HTTP_PROXY ni HTTPS_PROXY . Vous devez les analyser vous-même dans Node.js à l'aide de new URL(process.env.HTTP_PROXY) et injecter manuellement l'hôte et le port obtenus dans la proxy configuration manuellement.

Quelle est la différence entre les proxys résidentiels et les proxys de centre de données pour le scraping ?

Les proxys de centre de données utilisent des adresses IP provenant de fournisseurs de cloud. Ils sont rapides, abordables et disponibles en grande quantité, mais leurs plages d'adresses IP sont bien connues et plus faciles à bloquer par les sites web. Les proxys résidentiels utilisent des adresses IP attribuées par les FAI à de véritables foyers, ce qui les rend plus difficiles à détecter, mais aussi plus chers et plus lents.

Comment puis-je vérifier si ma requête Axios passe bien par le proxy ?

Envoyez une requête GET à https://httpbin.org/ip via votre proxy configuré. Comparez le origin champ de la réponse à l'adresse IP réelle de votre machine. S'ils diffèrent, le proxy est actif. Pour une vérification plus approfondie, consultez https://httpbin.org/headers afin de confirmer que les en-têtes de la requête correspondent aux attentes.

Conclusion

Savoir comment configurer correctement les connexions proxy Axios commence par des étapes simples (trois champs de configuration), mais devient plus nuancé une fois que l'on prend en compte l'authentification, le tunneling HTTPS, la logique de rotation, la prise en charge de SOCKS5 et la gestion des erreurs. Les modèles présentés dans ce guide couvrent tout, des expériences rapides aux pipelines de scraping prêts pour la production.

Le point essentiel à retenir : la configuration du proxy n'est que la moitié du chemin. Vous avez également besoin de proxys fiables, de délais d'expiration raisonnables et d'une logique de réessai qui n'assaille pas un point de terminaison inactif. Maîtrisez ces principes fondamentaux, et votre scraper basé sur Axios sera bien plus résilient.

Si la gestion des pools de proxys, de la rotation et de la lutte contre l'évasion des bots prend plus de temps aux ingénieurs que l'extraction des données elle-même, WebScrapingAPI gère la rotation des proxys, la résolution des CAPTCHA et la logique de réessai derrière un seul point de terminaison, ce qui vous permet de conserver votre code Axios et de vous concentrer sur ce que vous faites avec les données.

À propos de l'auteur
Suciu Dan, cofondateur @ WebScrapingAPI
Suciu Dancofondateur

Suciu Dan est le cofondateur de WebScrapingAPI et rédige des guides pratiques destinés aux développeurs sur le web scraping avec Python et Ruby, ainsi que sur les infrastructures de proxy.

Commencez à créer

Prêt à faire évoluer votre système de collecte de données ?

Rejoignez plus de 2 000 entreprises qui utilisent WebScrapingAPI pour extraire des données Web à l'échelle de l'entreprise, sans aucun coût d'infrastructure.