可以将node.js设置为识别代理(例如Fiddler)并通过代理路由所有ClientRequest吗?
我在Windows上使用节点,并希望调试http请求,就像我在浏览器中使用Fiddler for JavaScript一样。
请注意,我不是在尝试创建服务器收到的代理或代理请求。我想通过代理路由http.request()
发出的请求。如果我在浏览器中执行请求,我想使用Fiddler来检查请求和响应。
答案 0 :(得分:53)
我发现以下内容很漂亮。 request模块从windows环境变量中读取代理信息。
在Windows命令提示符下键入以下内容,将其设置为shell的生命周期。您只需从此shell运行您的节点应用程序。
set https_proxy=http://127.0.0.1:8888
set http_proxy=http://127.0.0.1:8888
set NODE_TLS_REJECT_UNAUTHORIZED=0
答案 1 :(得分:24)
要通过fiddler路由您的客户端请求,请改变您的options-object(例如:在创建http.request之前):
options.path = 'http://' + options.host + ':' + options.port + options.path;
options.headers.host = options.host;
options.host = '127.0.0.1';
options.port = 8888;
myReq = http.request(options, function (result) {
...
});
答案 2 :(得分:7)
如果您想从节点监控传出的请求 您可以使用request模块
并在选项中设置代理属性,例如
request.post('http://204.145.74.56:3003/test', {
headers :{ 'content-type' : 'application/octet-stream'},
'body' : buf ,
proxy: 'http://127.0.0.1:8888'
}, function() {
//callback
});
8888是fiddler的默认端口。
答案 3 :(得分:5)
回答我自己的问题:根据https://github.com/joyent/node/issues/1514 ,答案是否,但您可以使用支持代理的request
模块http://search.npmjs.org/#/request。
答案 4 :(得分:4)
process.env.https_proxy = "http://127.0.0.1:8888";
process.env.http_proxy = "http://127.0.0.1:8888";
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
答案 5 :(得分:0)
如果您想在一般情况下配置代理,那么其他答案是正确的:您需要为用作节点intentionally的库手动配置该代理,而无需理会系统代理设置
但是,如果您只是在寻找Node.js的类似于提琴手的HTTP调试工具,那么我已经在一个开源项目上进行了一段时间(具有内置节点支持),称为 HTTP Toolkit 。它可以让您
这里是一个演示示例,用于调试大量NPM,节点和浏览器流量:
在内部,此方法的工作方式是,为每个不使用该模块的模块注入一个额外的JS script到启动的Node进程中,该进程会挂接到require()
中以自动为您重新配置代理设置。全局设置。