
Utilisation de Node.js pour construire un proxy man-in-the-middle
Récemment, de nombreux amis qui font de la collecte de données se sont plaints que le site web anti-grimpe devient de plus en plus pervers. En fait, cette fois-ci, l'ensemble duProxy IP Transit StationParticulièrement utile, comme au crawler de porter une myriade de masques. Aujourd'hui, nous prenons Node.js à bras le corps, pour vous apprendre à construire un agent man-in-the-middle à partir de zéro.
Ne négligez pas vos préparatifs.
Assurez-vous d'abord d'être sur l'ordinateur.Node.js version ≥14Ne pas parcourir toute la version vintage. Il est recommandé d'utiliser nvm pour gérer la version, c'est pratique pour changer de vêtements. Le noyau n'est constitué que de deux modules :http-proxyrépondre en chantantexpressVeillez à ne pas vous tromper dans l'orthographe des commandes lorsque vous transformez des dépendances :
npm install express http-proxy --save-dev
Voici un piège à éviter : certains tutoriels vous diront de tourner à gauche et à droite.demandeEn fait, les versions les plus récentes de Node.js utilisent le module intégréhttpLe module est suffisant pour que cela fonctionne.
Méthode de construction du serveur proxy en trois étapes
Un nouveau.proxy.jsDocumentation, prenons trois mesures :
| déplacer | segment de code |
|---|---|
| 1. le cadre fondamental | const express = require('express') ; |
| 2. configuration de l'intergiciel | app.use('/api', createProxyMiddleware({ |
| 3) Activation des services | app.listen(3000, () => { |
Mettez une armure à l'agent.
Il ne suffit pas de pouvoir transférer, il faut ajouter une protection. Nous recommandons ipipgo.Pool IP dynamiqueLeur capacité de survie IP est mesurée à plus de 90%. Ajoutez une logique de commutation de proxy dans la configuration :
const proxyOptions = {
target : 'adresse cible',
router : function(req) {
return ipipgo.getRandomIP() // Obtient une IP premium aléatoire
}
}
Remarquez qu'il y a unrecomptage (par exemple, les résultats d'une élection)Les appels à l'API d'ipipgo doivent être fixés à des intervalles raisonnables, afin de ne pas faire exploser les serveurs d'autres personnes. Il est recommandé d'utiliser un minuteur pour changer d'IP toutes les 5 à 10 secondes.
Pièges courants AQ
Q : Que dois-je faire si je ne peux pas me connecter à l'agent en permanence ?
R : Vérifiez d'abord si l'adresse IP est valide à l'aide de la fonctioninterface de détection ping测下。如果返回码是407,八成是认证没做好。
Q : Comment gérez-vous la validation des certificats de sites web ?
A : Ajouter dans la configurationsécurisé : fauxIgnorer la validation SSL, bien que les certificats formels soient recommandés pour les environnements formels.
Q:请求太高怎么办?
A : Modifier l'adresse de l'ipipgoLigne IP dédiéeL'IP partagée a été mesurée plus de 3 fois plus rapidement que l'IP partagée. N'oubliez pas de définir le délai d'attente dans le code :
timeout : 5000 // en millisecondes
Conseils pour l'optimisation des performances
Enfin, j'aimerais partager avec vous quelques conseils pratiques :
- dépense ou frais
module en grappeOuvrez plusieurs processus, l'utilisation de l'unité centrale est directement doublée ! - Travailler avec Redis pour mettre en cache l'état de l'IP et réduire le nombre d'appels à l'API
- Ne soyez pas paresseux en matière de journalisation, utilisez la journalisation hiérarchique de Winston.
L'ensemble du paquet roule avec ipipgo'sRéserve d'adresses IP à forte valeur ajoutéeLe service technique à la clientèle de l'entreprise peut également fournir des solutions personnalisées s'il rencontre des mécanismes anti-crawling plus complexes. Si vous rencontrez des mécanismes anti-escalade plus complexes, leur service technique à la clientèle peut également fournir des solutions personnalisées, ce point est assez inquiétant.

