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
- Documentation du module HTTP de Node.js
- Documentation du module HTTPS pour Node.js
- Liste de proxys gratuits ProxyRoller
- Qu'est-ce que la méthode CONNECT ? (MDN)
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.
Commentaires (0)
Il n'y a pas encore de commentaires ici, vous pouvez être le premier !