Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det finns inget standardsätt för att aktivera proxyservrar för Node.js program. Om du kan använda proxy beror på vilket bibliotek du använder för att göra HTTP-begäranden. Normalt behöver du uppdatera koden för att konfigurera proxyn. Du kan dock använda global-agent paketet för att aktivera proxystöd för ditt Node.js program med minimala kodändringar.
Inbyggd Node.js hämtnings-API
I v17.5.0 introducerar Node.js experimentellt stöd för API:et fetch . Tyvärr är det här API:et fortfarande begränsat och har inte stöd för att konfigurera en proxy. Om du vill använda Dev Proxy med Node.js måste du använda ett annat bibliotek för att göra HTTP-begäranden.
global-agent
global-agent är ett populärt bibliotek som tillhandahåller en global HTTP/HTTPS-agent för Node.js. Med den kan du ange proxyn med hjälp av miljövariabler. Fördelen med att använda global-agent är att du inte behöver ändra hur du utfärdar HTTP-begäranden i ditt program för att använda Dev Proxy.
Här är ett exempel på hur du kan använda global-agent i ett Node.js program som använder 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));
})();
Så här kan du använda global-agent med Node.js och standardmodulen 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);
});
});
När du startar programmet anger du proxyn med hjälp av GLOBAL_AGENT_HTTP_PROXY miljövariabeln och ignorerar certifikatfel.
NODE_TLS_REJECT_UNAUTHORIZED=0 GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8000 node global-node-fetch.mjs
node-fetch
node-fetch är ett populärt bibliotek som tillhandahåller en fetch implementering för Node.js.
node-fetch har inte stöd för att ange proxyn med hjälp av miljövariabler. I stället måste du skapa en anpassad agent och skicka den till fetch metoden.
Här är ett exempel på hur du kan använda node-fetch med Dev Proxy genom att definiera en agent med hjälp av https-proxy-agent paketet.
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 är ett annat populärt bibliotek för att göra HTTP-begäranden i Node.js. Med Axios kan du ange proxyn med hjälp av miljövariabler eller ange agenten direkt i begärandekonfigurationen.
Använda Axios och Dev Proxy med miljövariabler
När du använder Dev Proxy med Axios och anger proxyn med hjälp av miljövariabler behöver du inte ändra koden. Allt du behöver göra är att ange https_proxy miljövariabeln och Axios använder den för att göra begäranden.
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));
})();
https_proxy Ange miljövariabeln antingen globalt eller när du startar din app.
https_proxy=http://127.0.0.1:8000 node axios.mjs
Fick
node-fetchPå liknande sätt stöder Got inte att ange proxyn med hjälp av miljövariabler. I stället måste du skapa en anpassad agent och skicka den till begäran.
Här är ett exempel på hur du kan använda Got with Dev Proxy:
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 har inte stöd för att ange proxyn med hjälp av miljövariabler. Om du vill använda Dev Proxy med SuperAgent måste du installera superagent-proxy plugin-programmet och konfigurera proxyn proxy med hjälp av metoden .
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));
})();
Kända problem
När du använder Dev Proxy med Node.js kan det uppstå följande problem.
UNABLE_TO_VERIFY_LEAF_SIGNATURE fel
När du använder Dev Proxy med Node.js får du ett fel som liknar:
/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'
}
För att åtgärda det här problemet måste du ange NODE_TLS_REJECT_UNAUTHORIZED miljövariabeln till 0. Du kan definiera det globalt eller direkt i koden när du startar din app.
NODE_TLS_REJECT_UNAUTHORIZED=0 node index.js