Utiliser le proxy de développement avec des applications Node.js
Il n’existe aucun moyen standard d’activer des proxys pour les applications Node.js. Si vous pouvez utiliser le proxy, dépend de la bibliothèque que vous utilisez pour effectuer des requêtes HTTP. En règle générale, vous devez mettre à jour votre code pour configurer le proxy. Vous pouvez toutefois utiliser le package pour activer la global-agent
prise en charge du proxy pour votre application Node.js avec des modifications de code minimales.
API de récupération de Node.js native
Dans la version 17.5.0, Node.js introduit la prise en charge expérimentale de l’API fetch
. Malheureusement, cette API est toujours limitée et ne prend pas en charge la configuration d’un proxy. Si vous souhaitez utiliser le proxy de développement avec Node.js, vous devez utiliser une autre bibliothèque pour effectuer des requêtes HTTP.
global-agent
global-agent
est une bibliothèque populaire qui fournit un agent HTTP/HTTPS global pour Node.js. Il vous permet de spécifier le proxy à l’aide de variables d’environnement. L’avantage de l’utilisation global-agent
est que vous n’avez pas besoin de modifier la façon dont vous émettez des requêtes HTTP dans votre application pour utiliser le proxy de développement.
Voici un exemple de la façon dont vous pouvez utiliser global-agent
dans une application Node.js qui utilise node-fetch
:
import fetch from 'node-fetch';
import { bootstrap } from 'global-agent';
bootstrap();
(async () => {
const result = await fetch('https://jsonplaceholder.typicode.com/posts');
const jsonResult = await result.json();
console.log(JSON.stringify(jsonResult, null, 2));
})();
Voici comment vous pouvez utiliser global-agent
avec Node.js et le module standard https
:
const https = require('https');
const globalAgent = require('global-agent');
globalAgent.bootstrap();
https.get('https://jsonplaceholder.typicode.com/posts', (resp) => {
let data = '';
resp.on('data', (d) => {
data += d;
});
resp.on('end', () => {
console.log(JSON.parse(data));
});
resp.on('error', (err) => {
console.error(err);
});
});
Lors du démarrage de votre application, spécifiez le proxy à l’aide de la variable d’environnement GLOBAL_AGENT_HTTP_PROXY
et ignorez les erreurs de certificat.
NODE_TLS_REJECT_UNAUTHORIZED=0 GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8000 node global-node-fetch.mjs
récupération de nœud
node-fetch est une bibliothèque populaire qui fournit une fetch
implémentation pour Node.js. node-fetch
ne prend pas en charge la spécification du proxy à l’aide de variables d’environnement. Au lieu de cela, vous devez créer un agent personnalisé et le transmettre à la fetch
méthode.
Voici un exemple de la façon dont vous pouvez utiliser node-fetch
le proxy de développement en définissant un agent à l’aide du https-proxy-agent
package.
const fetch = require('node-fetch');
const { HttpsProxyAgent } = require('https-proxy-agent');
(async () => {
// Create a custom agent pointing to Dev Proxy
const agent = new HttpsProxyAgent('http://127.0.0.1:8000');
// Pass the agent to the fetch method
const result = await fetch('https://jsonplaceholder.typicode.com/posts', { agent });
const jsonResult = await result.json();
console.log(JSON.stringify(jsonResult, null, 2));
})();
Axios
Axios est une autre bibliothèque populaire pour effectuer des requêtes HTTP dans Node.js. Axios vous permet de spécifier le proxy à l’aide de variables d’environnement ou de spécifier l’agent directement dans la configuration de la demande.
Utiliser Axios et le proxy de développement avec des variables d’environnement
Lorsque vous utilisez le proxy de développement avec Axios et spécifiez le proxy à l’aide de variables d’environnement, vous n’avez pas besoin de modifier votre code. Il vous suffit de définir la https_proxy
variable d’environnement et Axios l’utilise pour effectuer des requêtes.
import axios from 'axios';
(async () => {
const result = await axios.get('https://jsonplaceholder.typicode.com/posts');
const response = result.data;
console.log(JSON.stringify(response, null, 2));
})();
Spécifiez la variable d’environnement globalement ou lors du https_proxy
démarrage de votre application.
https_proxy=http://127.0.0.1:8000 node axios.mjs
Got
Similaire à node-fetch
, Got ne prend pas en charge la spécification du proxy à l’aide de variables d’environnement. Au lieu de cela, vous devez créer un agent personnalisé et le transmettre à la demande.
Voici un exemple de la façon dont vous pouvez utiliser Got avec le proxy de développement :
import got from 'got';
import { HttpsProxyAgent } from 'https-proxy-agent';
(async () => {
// Create a custom agent pointing to Dev Proxy
const agent = new HttpsProxyAgent('http://127.0.0.1:8000');
const result = await got('https://jsonplaceholder.typicode.com/posts', {
// Pass the agent to the fetch method
agent: {
https: agent
},
// Disable certificate validation
https: {
rejectUnauthorized: false
}
}).json();
console.log(JSON.stringify(result, null, 2));
})();
SuperAgent
SuperAgent
ne prend pas en charge la spécification du proxy à l’aide de variables d’environnement. Pour utiliser le proxy de développement avec SuperAgent, vous devez installer le superagent-proxy
plug-in et configurer le proxy à l’aide de la proxy
méthode.
const superagent = require('superagent');
require('superagent-proxy')(superagent);
(async () => {
const result = await superagent
.get('https://jsonplaceholder.typicode.com/posts')
.proxy('http://127.0.0.1:8000')
// Disable certificate validation
.disableTLSCerts();
console.log(JSON.stringify(result.body, null, 2));
})();
Problèmes connus
Lorsque vous utilisez le proxy de développement avec Node.js, vous pouvez rencontrer les problèmes suivants.
UNABLE_TO_VERIFY_LEAF_SIGNATURE
erreurs
Lorsque vous utilisez le proxy de développement avec Node.js, vous obtenez une erreur similaire à :
/Users/user/my-app/node_modules/node-fetch/lib/index.js:1501
reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
^
FetchError: request to https://jsonplaceholder.typicode.com/posts failed, reason: unable to verify the first certificate
at ClientRequest.<anonymous> (/Users/user/my-app/node_modules/node-fetch/lib/index.js:1501:11)
at ClientRequest.emit (node:events:518:28)
at TLSSocket.socketErrorListener (node:_http_client:495:9)
at TLSSocket.emit (node:events:518:28)
at emitErrorNT (node:internal/streams/destroy:169:8)
at emitErrorCloseNT (node:internal/streams/destroy:128:3)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
type: 'system',
errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE',
code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE'
}
Pour résoudre ce problème, vous devez définir la variable d’environnement NODE_TLS_REJECT_UNAUTHORIZED
sur 0
. Vous pouvez le définir globalement ou en ligne lors du démarrage de votre application.
NODE_TLS_REJECT_UNAUTHORIZED=0 node index.js