如何使用express作为通过代理?

时间:2017-01-30 13:23:29

标签: javascript node.js express https proxy

如何创建充当代理的快速服务器?

要求:

  • http + https
  • 在公司代理人后面工作
  • 选项可返回某些网址的特殊内容

我试过了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...');
});

这种方法的问题:

  • 它对所有请求使用get(HEAD,GET,...)
  • 未传递源请求的标头
  • 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)

我使用选项

启动了谷歌浏览器

--proxy-server="localhost:8080"

我的.npmrc也包含代理。

proxy=http://mycorporateproxy.com:8080
https-proxy=http://mycorporateproxy.com:8080

0 个答案:

没有答案