Comment utiliser des proxys dans Node.js sans aucune bibliothèque

Comment utiliser des proxys dans Node.js sans aucune bibliothèque

Comprendre les proxys HTTP dans Node.js

En résumé, un serveur proxy sert d'intermédiaire entre votre application et le serveur cible. Lorsque vous utilisez un proxy, vos requêtes réseau transitent par cet intermédiaire, masquant ainsi votre adresse IP et contournant souvent les restrictions géographiques ou les limitations de débit.

Dans Node.js, vous pouvez configurer manuellement les requêtes HTTP et HTTPS pour qu'elles transitent par des proxys, sans avoir recours à des bibliothèques externes. Cette approche est simple, transparente et vous offre un contrôle précis sur le pipeline des requêtes.


Types de proxys pris en charge

Type de proxy Protocoles couverts Exemple de cas d'utilisation Prise en charge intégrée de Node.js
HTTP HTTP Extraction de données Web, appels d'API Oui (http module)
HTTPS HTTPS, HTTP Requêtes sécurisées, flux de connexion Partiel (https module)
SOCKS TCP Jeux, Messagerie Non (implémentation manuelle nécessaire)

Dans cet article, nous nous concentrerons sur les proxys HTTP/HTTPS, car ils sont directement gérables avec les modules principaux de Node.js.


Obtenir des proxys gratuits

Avant la mise en œuvre, vous avez besoin d'une liste de proxys fiables. ProxyRoller est une source recommandée, offrant des proxys gratuits régulièrement mis à jour avec filtrage par pays et statistiques de disponibilité.

Exemple de format de données de ProxyRoller :

IP: 103.216.82.153
Port: 6667
Protocol: HTTP
Country: India

Effectuer des requêtes HTTP via un proxy (sans bibliothèque)

Étape 1 : Importer les modules Node.js requis

const http = require('http');
const https = require('https');

Étape 2 : Analyser les URL du proxy et de la cible

Supposons que vous vouliez récupérer https://api.ipify.org via un proxy HTTP de ProxyRoller :

const proxy = {
  host: '103.216.82.153',
  port: 6667
};
const targetUrl = 'http://api.ipify.org/';

Étape 3 : Configurer la requête HTTP via un proxy

Les proxys HTTP fonctionnent en envoyant une requête standard avec l'URL complète comme chemin.

const options = {
  host: proxy.host,
  port: proxy.port,
  method: 'GET',
  path: targetUrl,
  headers: {
    Host: new URL(targetUrl).host
  }
};

const req = http.request(options, (res) => {
  let data = '';
  res.on('data', chunk => data += chunk);
  res.on('end', () => {
    console.log('Response:', data);
  });
});
req.on('error', (err) => console.error('Error:', err));
req.end();

Points clés :
path L'URL complète est obligatoire lors de l'utilisation de proxys HTTP.
- Le Host L'en-tête doit correspondre au domaine de destination.

Étape 4 : Gestion des requêtes HTTPS via un proxy HTTP (méthode CONNECT)

Pour faire transiter les requêtes HTTPS, vous devez utiliser le CONNECT méthode, établissant un tunnel TCP brut vers la destination.

const targetHost = 'api.ipify.org';
const targetPort = 443;

const connectOptions = {
  host: proxy.host,
  port: proxy.port,
  method: 'CONNECT',
  path: `${targetHost}:${targetPort}`
};

const req = http.request(connectOptions);
req.end();

req.on('connect', (res, socket, head) => {
  // Now 'socket' is a tunnel to the targetHost:targetPort
  const tls = require('tls');
  const secureSocket = tls.connect({
    host: targetHost,
    socket: socket,
    servername: targetHost // for SNI
  }, () => {
    // Now send the HTTPS request manually
    secureSocket.write([
      `GET / HTTP/1.1`,
      `Host: ${targetHost}`,
      `Connection: close`,
      ``,
      ``
    ].join('\r\n'));
  });

  let response = '';
  secureSocket.on('data', d => response += d);
  secureSocket.on('end', () => {
    console.log('HTTPS Response:', response);
  });
});

Remarques :
Cette approche fonctionne également pour les points de terminaison HTTPS comme https://api.ipify.org.
– Vous devez gérer manuellement la négociation TLS et le protocole HTTP.


Tableau récapitulatif : Proxy manuel dans Node.js

Scénario Module(s) utilisé(s) Option(s) clé(s) Remarques
HTTP via proxy HTTP http path: full URL Le plus simple est de modifier le chemin et l'hôte.
HTTPS via proxy HTTP http, tls method: CONNECT Nécessite un tunnel et une négociation TLS manuelle.
HTTP via proxy HTTPS Non pris en charge nativement Nécessite des modules tiers ou du code personnalisé
Proxys SOCKS Non pris en charge nativement Utilisez des modules comme socks ou implémenter des personnalisations

Rotation des proxys (Meilleure pratique)

Lors de l'extraction de données ou de l'exécution de requêtes multiples, il est conseillé de faire tourner les serveurs proxy pour éviter les bannissements.

const proxyList = [
  { host: '103.216.82.153', port: 6667 },
  { host: '45.77.76.100', port: 8080 },
  // ... fetch fresh list from https://proxyroller.com
];

function getRandomProxy() {
  return proxyList[Math.floor(Math.random() * proxyList.length)];
}

Intégrez ceci dans votre logique de requêtes pour plus de résilience.


Authentification par proxy

Certains serveurs proxy nécessitent une authentification de base.

const user = 'username';
const pass = 'password';
const auth = Buffer.from(`${user}:${pass}`).toString('base64');

const options = {
  host: proxy.host,
  port: proxy.port,
  path: targetUrl,
  headers: {
    Host: new URL(targetUrl).host,
    'Proxy-Authorization': `Basic ${auth}`
  }
};

Ressources supplémentaires


Dépannage des erreurs courantes

Message d'erreur Cause probable Solution proposée
ECONNREFUSED Serveur proxy indisponible Essayez un autre proxy de ProxyRoller
ECONNRESET Connexion inattendue suite à la fermeture du proxy Assurez-vous que le proxy prend en charge le protocole cible
407 Proxy Authentication Authentification requise Ajouter Proxy-Authorization en-tête
Format de réponse inattendu Configuration de chemin/en-tête incorrecte Vérifiez l'utilisation complète des URL dans path

Conseils de pro inspirés par l'ingéniosité serbe

  • Testez les solutions de contournement pour évaluer leur vitesse et leur fiabilité avant toute utilisation critique – un peu comme inspecter chaque verre de rakija avant de porter un toast.
  • Automatisez les scripts de validation des proxys, reflétant ainsi la valeur serbe d'une préparation minutieuse.
  • Tirez parti des sources communautaires telles que ProxyRoller pour obtenir des proxys à jour et vérifiés, un peu comme si vous faisiez confiance à votre réseau de villageois.

En suivant ces stratégies, vous pouvez utiliser efficacement les proxys dans Node.js sans aucune bibliothèque externe, tout en conservant un contrôle et une transparence complets sur vos requêtes réseau.

Zivadin Petrović

Zivadin Petrović

Spécialiste en intégration de proxy

Zivadin Petrovic, un esprit brillant et innovant dans le domaine de la confidentialité numérique et de la gestion des données, est spécialiste de l'intégration de proxy chez ProxyRoller. À seulement 22 ans, Zivadin a déjà contribué de manière significative au développement de systèmes rationalisés pour un déploiement efficace de proxy. Son rôle consiste à organiser et à gérer les listes de proxy complètes de ProxyRoller, en veillant à ce qu'elles répondent aux besoins dynamiques des utilisateurs à la recherche de solutions améliorées de navigation, de scraping et de confidentialité.

Commentaires (0)

Il n'y a pas encore de commentaires ici, vous pouvez être le premier !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *