在 Node.js 中创建一个简单的 HTTP 代理

发布于 2023-01-28 16:07:02 字数 2326 浏览 76 评论 0

http-proxy 是在 Node.js 中创建 HTTP 代理的最流行方式。下面是一个独立的脚本,展示了如何将 http-proxy 与 Express 一起使用,并使用 Axios 发出代理 HTTP 请求 。

const express = require('express');
const httpProxy = require('http-proxy');

// Create a proxy and listen on port 3000
const proxy = httpProxy.createProxyServer({});
const app = express();
app.get('*', function(req, res) {
  // Prints "Request GET https://httpbin.org/get?answer=42"
  console.log('Request', req.method, req.url);
  proxy.web(req, res, { target: `${req.protocol}://${req.hostname}` });
});
const server = await app.listen(3000);

const axios = require('axios');
const res = await axios.get('http://httpbin.org/get?answer=42', {
  // `proxy` means the request actually goes to the server listening
  // on localhost:3000, but the request says it is meant for
  // 'http://httpbin.org/get?answer=42'
  proxy: {
    host: 'localhost',
    port: 3000
  }
});
console.log(res.data);

http-proxy 包不需要你使用 Express。 您还可以使用 Node 的内置 HTTPServer Class

const http = require('http');
const httpProxy = require('http-proxy');

const proxy = httpProxy.createProxyServer({});
http.createServer(function(req, res) {
  console.log('Request', req.method, req.url);
  proxy.web(req, res, { target: `${req.protocol}://${req.hostname}` });
}).listen(3000);

修改请求

对于代理服务器,有两个 HTTP 请求:代理服务器收到的入站请求和代理服务器发送的出站请求。 在前面的示例中,入站请求与出站请求相同。 但是,许多代理服务器会修改出站请求。 例如,您可能希望代理服务器设置 HTTP 标头。

为了修改出站请求,您 需要监听 http-proxy 的 proxyReq 事件 ,这使您可以访问 http-proxy 将发送的出站请求。 例如,以下是如何在所有出站请求上设置 授权 标头:

const proxy = httpProxy.createProxyServer({});
proxy.on('proxyReq', function(proxyReq) {
  proxyReq.setHeader('Authorization', 'my-secret-key');
});

const app = express();
app.get('*', function(req, res) {
  proxy.web(req, res, { target: `${req.protocol}://${req.hostname}` });
});
const server = await app.listen(3000);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

滥情空心

暂无简介

0 文章
0 评论
805 人气
更多

推荐作者

遂心如意

文章 0 评论 0

5513090242

文章 0 评论 0

巷雨优美回忆

文章 0 评论 0

junpengz2000

文章 0 评论 0

13郎

文章 0 评论 0

qq_xU4RDg

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文