在 Node.js 中创建一个简单的 HTTP 代理
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 技术交流群。
上一篇: JavaScript 中的相等判断
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论