Megosztás a következőn keresztül:


Dev Proxy használata Node.js alkalmazásokkal

A proxyk Node.js alkalmazásokhoz való engedélyezésének nincs szokásos módja. Attól függ, hogy használhat-e proxyt, attól függ, hogy milyen kódtárat használ HTTP-kérések létrehozásához. A proxy konfigurálásához általában frissítenie kell a kódot. A csomaggal global-agent azonban minimális kódmódosításokkal engedélyezheti az Node.js alkalmazás proxytámogatását.

Natív Node.js api lekérése

A 17.5.0-s verzióban a Node.js kísérleti támogatást vezet be az fetch API-hoz. Sajnos ez az API továbbra is korlátozott, és nem támogatja a proxy konfigurálását. Ha dev proxyt szeretne használni Node.js, akkor egy másik kódtárat kell használnia a HTTP-kérések létrehozásához.

global-agent

global-agent egy népszerű kódtár, amely globális HTTP/HTTPS-ügynököt biztosít a Node.js számára. Lehetővé teszi a proxy környezeti változók használatával történő megadását. A global-agent használatának előnye, hogy nem kell módosítania, hogyan ad ki HTTP-kéréseket az alkalmazásában a Dev Proxy használatához.

Íme egy példa arra, hogyan használhatja a global-agent-t egy Node.js alkalmazásban, amely node-fetch-t használ.

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));
})();

Az alábbiak szerint használhatja global-agent a Node.js-szal és a standard https modullal:

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);
  });
});

Az alkalmazás indításakor adja meg a proxyt a környezeti változó használatával, és hagyja figyelmen kívül a GLOBAL_AGENT_HTTP_PROXY tanúsítványhibákat.

NODE_TLS_REJECT_UNAUTHORIZED=0 GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8000 node global-node-fetch.mjs

node-fetch

A node-fetch egy népszerű kódtár, amely implementációt fetch biztosít a Node.js számára. node-fetch nem támogatja a proxy környezeti változók használatával történő megadását. Ehelyett létre kell hoznia egy egyéni ügynököt, és át kell adnia a fetch metódusnak.

Íme egy példa arra, hogyan használhatja a Dev Proxyt node-fetch az ügynök https-proxy-agent csomaggal történő definiálásával.

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

Az Axios egy másik népszerű könyvtár HTTP-kérések küldésére Node.js-ben. Az Axios lehetővé teszi, hogy környezeti változók használatával adja meg a proxyt, vagy közvetlenül a kérelemkonfigurációban adja meg az ügynököt.

Az Axios és a Dev Proxy használata környezeti változókkal

Ha dev proxyt használ az Axiossal, és környezeti változók használatával adja meg a proxyt, nem kell módosítania a kódot. Mindössze annyit kell tennie, hogy beállítja a környezeti változót, és az https_proxy Axios azt használja a kérések teljesítéséhez.

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));
})();

Adja meg a https_proxy környezeti változót globálisan vagy az alkalmazás indításakor.

https_proxy=http://127.0.0.1:8000 node axios.mjs

Megkapta

node-fetch Ehhez hasonlóan a Got nem támogatja a proxy környezeti változók használatával történő megadását. Ehelyett létre kell hoznia egy egyéni ügynököt, és továbbítania kell azt a kérésnek.

Íme egy példa a Got with Dev Proxy használatára:

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));
})();

Szuperagent

SuperAgent nem támogatja a proxy környezeti változók használatával történő megadását. Ha a Dev Proxyt a SuperAgenttel szeretné használni, telepítenie kell a superagent-proxy beépülő modult, és konfigurálnia kell a proxyt a proxy módszerrel.

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));
})();

Ismert problémák

Ha dev proxyt használ Node.js, az alábbi problémákat tapasztalhatja.

UNABLE_TO_VERIFY_LEAF_SIGNATURE hiba

Ha dev proxyt használ Node.js, a következőhöz hasonló hibaüzenet jelenik meg:

/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'
}

A probléma megoldásához be kell állítania a környezeti változót a NODE_TLS_REJECT_UNAUTHORIZED következőre 0: . Az alkalmazás indításakor globálisan vagy soron belül is definiálhatja.

NODE_TLS_REJECT_UNAUTHORIZED=0 node index.js