可以将代理(如fiddler)与Node.js的ClientRequest一起使用

时间:2012-01-02 04:15:46

标签: javascript node.js fiddler

可以将node.js设置为识别代理(例如Fiddler)并通过代理路由所有ClientRequest吗?

我在Windows上使用节点,并希望调试http请求,就像我在浏览器中使用Fiddler for JavaScript一样。

请注意,我不是在尝试创建服务器收到的代理或代理请求。我想通过代理路由http.request()发出的请求。如果我在浏览器中执行请求,我想使用Fiddler来检查请求和响应。

6 个答案:

答案 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 。它可以让您

  • 一键打开应用程序中的终端
  • 从该终端启动任何节点CLI / server / script
  • 它发送的所有HTTP或HTTPS请求都会自动被代理,因此您可以查看和重写所有内容。无需更改代码或不需要npm软件包。

这里是一个演示示例,用于调试大量NPM,节点和浏览器流量:

Demo screenshot

在内部,此方法的工作方式是,为每个不使用该模块的模块注入一个额外的JS script到启动的Node进程中,该进程会挂接到require()中以自动为您重新配置代理设置。全局设置。