
Pratique de Node.js pour construire un middleware de proxy
Le vieux fer à repasser devrait avoir rencontré le besoin de scénarios d'IP proxy, n'est-ce pas ? Par exemple, pour crawler des données par le site bloqué en IP, ou pour tester l'effet de l'accès à différentes régions. Aujourd'hui, nous utilisons Node.js l'ensemble du middleware HTTP proxy simple, sans ces frameworks complexes, directement sur le module natif pour s'engager dans !
Préparez d'abord un nouveau projet, puis frappez-le dans le terminal.npm init -yConstruire un package.json. Voici l'essentiel, le module de base que nous allons utiliser est le modulehttp-proxyIl est plus facile à utiliser que de faire des nouilles instantanées. Commandes d'installation :
npm install http-proxy --save
Trois lignes de code pour démarrer un service proxy
Créez un nouveau fichier proxy.js et codez ceci :
const http = require('http') ;
const httpProxy = require('http-proxy') ;
const proxy = httpProxy.createProxyServer() ;
const server = http.createServer((req, res) => {
proxy.web(req, res, {
target : 'http://your-backend-server.com',
changeOrigin : true
}) ;
}) ;
server.listen(3000, () => {
console.log('Le service proxy fonctionne sur le port 3000 !) ;
}) ;
Voici un piège à éviter.changeOriginCe paramètre doit être fixé à true, sinon le site web cible risque de ne pas reconnaître votre demande. C'est comme si vous alliez chez quelqu'un sans frapper, vous serez bloqué, n'est-ce pas ?
Mettre un gilet IP sur le proxy.
Il est temps de sortir nosService proxy ipipgoet modifiez le code de la manière suivante :
const proxy = httpProxy.createProxyServer({
agent : new http.Agent({
agent : new http.Agent({ keepAlive : true, proxy : '')
proxy : 'http://username:password@gateway.ipipgo.com:8080'
})
}) ;
Ici nom d'utilisateur et mot de passe pour aller sur le site officiel d'ipipgo pour s'inscrire, leur pool d'IP proxy est très large, des nœuds dans tout le pays. Particulièrement adapté pour les scènes qui nécessitent des changements fréquents d'IP, comme la prise de chaussures et de tickets ou autre (tête de chien manuelle).
Comment jouer avec les pools d'adresses IP dynamiques
Si vous avez besoin de changer d'IP automatiquement, vous pouvez le modifier comme suit :
const ipPool = [
'http://ip1.ipipgo.com:8080',
'http://ip2.ipipgo.com:8080'.
//... Plus d'IP
] ;
function getRandomIP() {
return ipPool[Math.floor(Math.random() ipPool.length)] ; }.
}
// Utilisez ceci pour les demandes de proxy
proxy.web(req, res, {
target : 'http://your-backend-server.com',
agent : new http.Agent({
proxy : getRandomIP()
})
}) ;
Il est recommandé d'utiliser l'API dynamique fournie par ipipgo pour obtenir des IP, leurs IP sont hautement anonymes, et il est plus stable de les utiliser. J'ai utilisé un certain nombre de proxies auparavant, et ipipgo a le taux de survie le plus élevé, et en gros je ne rencontre pas d'IP mortes que je ne peux pas utiliser.
Lignes directrices sur le déminage des problèmes courants
| symptomatique | antidote |
|---|---|
| Délai de connexion | Vérifier si l'adresse IP du proxy est vivante, ipipgo assure une surveillance en temps réel en arrière-plan. |
| Retourner l'erreur 407 | Veillez à ce que les informations d'authentification soient correctement remplies et n'ajoutez pas de symboles spéciaux au mot de passe. |
| temps de réponse lent | Passer au nœud le plus proche, ipipgo prend en charge la sélection d'IP par ville |
Conseils pratiques et astuces
1) N'oubliez pas de fixer un délai d'attente pour que le programme ne s'arrête pas en cours de route :
proxy.web(req, res, {
target : 'http://your-backend-server.com',
timeout : 5000 // 5 secondes pour pincer la ligne
}) ;
2. voici comment traiter les sites HTTPS :
proxy.on('error', (err, req, res) => {
res.writeHead(500, {
'Content-Type' : 'text/plain'
}) ;
res.end('Le proxy est en train de s'agiter, vérifiez-le !) ;
}) ;
3) Pour enregistrer les journaux, vous pouvez suspendre un intergiciel morgan ou écrire un simple intergiciel de journalisation :
app.use((req, res, next) => {
console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`) ;
next() ;
}) ;
Temps consacré à l'assurance qualité
Q : Que dois-je faire si le proxy IP échoue toujours ?
R : Il est recommandé d'utiliser le pool d'IP dynamiques d'ipipgo, dont le taux de survie des IP peut atteindre 98% ou plus.
Q : Comment gérez-vous les scénarios de forte concurrence ?
R : Le mécanisme de boucle événementielle de Node.js lui-même convient aux opérations intensives en E/S, mais pour contrôler le nombre de concurrences, vous pouvez utiliser la bibliothèque asynchrone parallelLimit.
Q : Comment choisir un fournisseur de services proxy ?
R : Concentrez-vous sur trois aspects : la taille du pool d'adresses IP, la vitesse de réponse et la prise en charge des protocoles. Comme ipipgo, la prise en charge de socks5 et de http, deux protocoles utilisés, est plus flexible.
Enfin, pour les crawlers et autres, il faut se conformer aux règles du site, ne pas s'accrocher à leurs serveurs. Proxy IP devrait également faire attention à la loi de base, nous sommes des échanges techniques, ne le prenez pas pour faire de mauvaises choses ah !

