Monter un proxy configurable avec NodeJS en quelques minutes
Vous cherchez un proxy en NodeJS facile à déployer, configurable et open-source ? Je vous présente AnyProxy !
Article publié le 07/08/2020, dernière mise à jour le 22/10/2024
En 2019, j'ai travaillé sur un assistant de shopping pour la high-tech appelé Kalico, dont le but était d'être toujours à jour sur les nouvelles sorties téléphones, mais aussi l'évolution de leur prix.
En essayant de récupérer les prix grâce à un crawler sur les pages des sites e-commerce, je me suis vite heurté à un problème que je n'avais encore jamais rencontré. Certains sites tentaient de détecter la localisation géographique de mon "faux" client afin de lui indiquer si le produit pouvait être livré dans sa zone.
Problème, mon api tournait sur un serveur Heroku, localisé en France, et lorsque j’essayai de crawler les liens des boutiques UK et US, les produits étaient toujours indisponibles à l'envoi (logique) et refusait donc d'afficher le prix local.
Ma solution fût donc de monter trois machines Amazon localisées en France, au Royaume-Uni et aux Etats-Unis afin d'y faire tourner de simples proxies pour déjouer la localisation des plateformes.
Après avoir testé plusieurs librairies Javascript, tournant sous NodeJS (dans le but de garder une infrastructure homogène), j'ai découvert la solution complète, open-source et très facilement déployable : Anyproxy.
Anyproxy
Anyproxy est (comme son nom l'indique) un proxy, entièrement configurable, développé et maintenu par le géant de l'e-commerce chinois : Alibaba.
L'installation se faire directement depuis npm et le démarrage du logiciel ne nécessite qu'une seule ligne de commande :
$ npm install -g anyproxy
$ anyproxy
Note : AnyProxy est configuré pour écouter par défaut sur le port 8001 (proxy) et 8002 (interface), pensez à vérifier que vos port sont ouverts si vous êtes sur un serveur distant
Une fois lancé, vous pouvez accéder à l'interface web sur votre http://localhost:8002 et commencer à faire passer des requêtes au travers de votre proxy !
Les spécificités d'AnyProxy
AnyProxy est très configurable, notamment pour :
- La prise en charge de certificat SSL et des requêtes https
- L'ajout de règles de routage spécifiques à l'aide d'un simple fichier .js
- Être lancé à l'intérieur d'une application, comme un module NodeJS classique
Pour apprendre à configurer votre proxy, je vous renvoie vers la documentation officielle : http://anyproxy.io/en/
A noter que j'ai vu quelques morceaux de textes encore écrits en Chinois mais jamais dans la doc technique.
Sécurité
Si vous laissez l'accès distant à votre proxy, je vous conseille fortement de ne pas ouvrir le port de l'interface web en production car il n'y a pas d'authentification.
Mais surtout, pensez à ne jamais laisser tourner un proxy ouvert sans filtre, je vous ai expliqué les possibles conséquences dans mon article "Le jour où Amazon m'a mis la pression...", la solution la plus simple est d'ajouter une règle d'authentification comme ci-dessous :
//rule.js
module.exports = {
// introduction
summary: 'Authentication',
// intercept before send request to server
beforeSendRequest(requestDetails) {
console.log(requestDetails.requestOptions.headers);
if(requestDetails.requestOptions.headers.authorization !== 'Basic test:token'){
return {
response: {
statusCode: 401,
header: { 'content-type': 'text/html' },
body: 'You are not authorized to use this proxy'
}
};
}
return {};
}
};
Pour activer cette règle, il ne vous reste plus qu'à relancer AnyProxy avec un paramètre --rule comme ci-dessous !
$ anyproxy --rule ./rule.js
Aucun commentaire pour l'instant