如何创建充当代理的快速服务器?
要求:
- http + https
- 在公司代理背后工作
- 为某些 url 返回特殊内容的选项
我尝试了 http-proxy、express-http-proxy、https-proxy-agent、request
。我不知道如何正确使用它们。
使用请求
我用 request
得到的最好结果。但也存在一些问题。
var express = require('express'),
request = require('request'),
app = express();
var r = request.defaults({'proxy':'http://mycorporateproxy.com:8080'});
function apiProxy() {
return function (req, res, next) {
console.log(req.method);
r.get(req.url).pipe(res);
}
}
app.use(apiProxy());
app.listen(8080, function () {
'use strict';
console.log('Listening...');
});
这种方法的问题:
- 它对所有请求(HEAD、GET、...)使用
get
- 未传递源请求的 header
- https 不工作
使用 http-proxy
var express = require('express'),
httpProxy = require('http-proxy'),
app = express();
var proxy = httpProxy.createProxyServer({
});
function apiProxy() {
return function (req, res, next) {
console.log(req.method);
proxy.web(req, res, {target: req.url});
}
}
app.use(apiProxy());
app.listen(8080, function () {
'use strict';
console.log('Listening...');
});
我得到了(可能是因为缺少公司代理)
Error: connect ECONNREFUSED xx.xx.xx.xx:80
at Object.exports._errnoException (util.js:1026:11)
at exports._exceptionWithHostPort (util.js:1049:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1085:14)
我用这个选项启动了 google chrome
--proxy-server="localhost:8080"
我的 .npmrc
也包含代理。
proxy=http://mycorporateproxy.com:8080
https-proxy=http://mycorporateproxy.com:8080
最佳答案
我已经成功地将 http-proxy-middleware
与以下内容一起使用:
const express = require("express")
const app = require("express")()
const proxy = require("http-proxy-middleware")
const package = require("./package.json")
const target = process.env.TARGET_URL
const port = process.env.PORT
const wildcardProxy = proxy({ target })
app.use(wildcardProxy)
app.listen(config.port, () => console.log(`Application ${package.name} (v${package.version}) started on ${config.port}`))
我还不需要 https,但文档中提到了它:https://github.com/chimurai/http-proxy-middleware#http-proxy-options
关于javascript - 如何使用 express 作为直通代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41937011/