Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Nie ma standardowego sposobu włączania serwerów proxy dla aplikacji Node.js. Niezależnie od tego, czy możesz używać serwera proxy, zależy od biblioteki, której używasz do wykonywania żądań HTTP. Zazwyczaj należy zaktualizować kod, aby skonfigurować serwer proxy. Możesz jednak użyć global-agent
pakietu, aby włączyć obsługę serwera proxy dla aplikacji Node.js z minimalnymi zmianami kodu.
Natywne API fetch dla Node.js
W wersji 17.5.0 Node.js wprowadza eksperymentalną obsługę interfejsu fetch
API. Niestety ten interfejs API jest nadal ograniczony i nie obsługuje konfigurowania serwera proxy. Jeśli chcesz używać serwera proxy deweloperskiego z Node.js, musisz użyć innej biblioteki do tworzenia żądań HTTP.
global-agent
global-agent
to popularna biblioteka, która udostępnia globalnego agenta HTTP/HTTPS dla Node.js. Umożliwia określenie serwera proxy przy użyciu zmiennych środowiskowych. Zaletą użycia global-agent
jest to, że nie trzeba zmieniać sposobu wystawiania żądań HTTP w aplikacji w celu korzystania z serwera proxy deweloperskiego.
Oto przykład, jak można użyć global-agent
w aplikacji Node.js, która korzysta z 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));
})();
Poniżej pokazano, jak używać
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);
});
});
Podczas uruchamiania aplikacji określ serwer proxy przy użyciu zmiennej środowiskowej GLOBAL_AGENT_HTTP_PROXY
i ignoruj błędy certyfikatu.
NODE_TLS_REJECT_UNAUTHORIZED=0 GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8000 node global-node-fetch.mjs
node-fetch
node-fetch to popularna biblioteka udostępniająca implementację fetch
Node.js.
node-fetch
nie obsługuje określania serwera proxy przy użyciu zmiennych środowiskowych. Zamiast tego należy utworzyć agenta niestandardowego i przekazać go do metody fetch
.
Oto przykład, jak można użyć node-fetch
z Dev Proxy, definiując agenta przy użyciu pakietu https-proxy-agent
.
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 to kolejna popularna biblioteka do tworzenia żądań HTTP w Node.js. Axios umożliwia określenie serwera proxy przy użyciu zmiennych środowiskowych lub określenie agenta bezpośrednio w konfiguracji żądania.
Używanie biblioteki Axios i Dev Proxy z zmiennymi środowiskowymi
Jeśli używasz serwera proxy deweloperskiego z axiosem i określasz serwer proxy przy użyciu zmiennych środowiskowych, nie musisz zmieniać kodu. Wszystko, co musisz zrobić, to ustawić zmienną https_proxy
środowiskową, a axios używa go do tworzenia żądań.
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));
})();
Określ zmienną https_proxy
środowiskową globalnie lub podczas uruchamiania aplikacji.
https_proxy=http://127.0.0.1:8000 node axios.mjs
Dostał
Podobnie jak node-fetch
, Got nie obsługuje określania serwera proxy przy użyciu zmiennych środowiskowych. Zamiast tego należy utworzyć agenta niestandardowego i przekazać go do żądania.
Oto przykład, jak można użyć Got z 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
nie obsługuje określania serwera proxy przy użyciu zmiennych środowiskowych. Aby używać Dev Proxy z SuperAgent, należy zainstalować wtyczkę superagent-proxy
i skonfigurować proxy przy użyciu metody proxy
.
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));
})();
Znane problemy
W przypadku korzystania z serwera proxy deweloperskiego z Node.js mogą wystąpić następujące problemy.
Błąd UNABLE_TO_VERIFY_LEAF_SIGNATURE
W przypadku korzystania z serwera proxy deweloperskiego z Node.js występuje błąd podobny do następującego:
/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'
}
Aby rozwiązać ten problem, należy ustawić zmienną środowiskową NODE_TLS_REJECT_UNAUTHORIZED
na 0
wartość . Możesz zdefiniować ją globalnie lub w wierszu podczas uruchamiania aplikacji.
NODE_TLS_REJECT_UNAUTHORIZED=0 node index.js