Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
No hay ninguna manera estándar de habilitar servidores proxy para aplicaciones Node.js. Si puede usar proxy, depende de la biblioteca que use para realizar solicitudes HTTP. Normalmente, debe actualizar el código para configurar el proxy. Sin embargo, puede usar el paquete para habilitar la global-agent compatibilidad con proxy para la aplicación de Node.js con cambios mínimos de código.
API de captura de Node.js nativa
En la versión 17.5.0, Node.js presenta compatibilidad experimental con la fetch API. Desafortunadamente, esta API sigue siendo limitada y no admite la configuración de un proxy. Si quiere usar el proxy de desarrollo con Node.js, debe usar una biblioteca diferente para realizar solicitudes HTTP.
global-agent
global-agent es una biblioteca popular que proporciona un agente HTTP/HTTPS global para Node.js. Permite especificar el proxy mediante variables de entorno. La ventaja de usar global-agent es que no es necesario cambiar cómo emite solicitudes HTTP en la aplicación para usar el proxy de desarrollo.
Este es un ejemplo de cómo puede usar global-agent en una aplicación de Node.js que usa 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));
})();
Aquí se muestra cómo puede usar global-agent con Node.js y el módulo estándar 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);
});
});
Al iniciar la aplicación, especifique el proxy mediante la GLOBAL_AGENT_HTTP_PROXY variable de entorno y omita los errores de certificado.
NODE_TLS_REJECT_UNAUTHORIZED=0 GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8000 node global-node-fetch.mjs
node-fetch
node-fetch es una biblioteca popular que proporciona una fetch implementación para Node.js. node-fetch no admite la especificación del proxy mediante variables de entorno. En su lugar, debe crear un agente personalizado y pasarlo al fetch método .
Este es un ejemplo de cómo puede usar node-fetch con el proxy de desarrollo mediante la definición de un agente mediante el https-proxy-agent paquete.
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 es otra biblioteca popular para realizar solicitudes HTTP en Node.js. Axios permite especificar el proxy mediante variables de entorno o especificar el agente directamente en la configuración de la solicitud.
Uso de Axios y proxy de desarrollo con variables de entorno
Cuando se usa Dev Proxy con Axios y se especifica el proxy mediante variables de entorno, no es necesario cambiar el código. Lo único que debe hacer es establecer la https_proxy variable de entorno y Axios lo usa para realizar solicitudes.
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));
})();
Especifique la https_proxy variable de entorno globalmente o al iniciar la aplicación.
https_proxy=http://127.0.0.1:8000 node axios.mjs
Tiene
De forma similar a node-fetch, Got no admite la especificación del proxy mediante variables de entorno. En su lugar, debe crear un agente personalizado y pasarlo a la solicitud.
Este es un ejemplo de cómo puede usar 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 no admite la especificación del proxy mediante variables de entorno. Para usar el proxy de desarrollo con SuperAgent, debe instalar el superagent-proxy complemento y configurar el proxy mediante el proxy método .
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));
})();
Problemas conocidos
Al usar el proxy de desarrollo con Node.js, es posible que encuentre los siguientes problemas.
UNABLE_TO_VERIFY_LEAF_SIGNATURE con error
Al usar el proxy de desarrollo con Node.js, obtendrá un error similar al siguiente:
/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'
}
Para corregir este problema, debe establecer la NODE_TLS_REJECT_UNAUTHORIZED variable 0de entorno en . Puede definirla globalmente o en línea al iniciar la aplicación.
NODE_TLS_REJECT_UNAUTHORIZED=0 node index.js