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

chu*_*ckj 46 javascript fiddler node.js

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

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

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

Nar*_*aen 53

我发现以下内容很漂亮.所述请求模块读取从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
Run Code Online (Sandbox Code Playgroud)

  • 每个人都在十几个站点上发布此消息。这不适用于“ Windows 10”和“ https”连接。 (3认同)
  • 好方案!我喜欢它不需要修改代码. (2认同)
  • 使用bash shell,将`set`替换为`export`,它将起作用. (2认同)

小智 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) {
    ...
});
Run Code Online (Sandbox Code Playgroud)


dor*_*guy 7

如果要从节点监控传出请求,可以使用请求模块

并在这些选项中设置代理属性

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
});
Run Code Online (Sandbox Code Playgroud)

8888是fiddler的默认端口.


War*_*ock 6

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";
Run Code Online (Sandbox Code Playgroud)

  • 如果 fiddler 正在运行,浏览器将使用它作为代理,但如果它没有运行,则不会。浏览器的请求在任何一种情况下都有效。如何使用 node.js 的请求库获得相同的行为? (2认同)

chu*_*ckj 5

回答我自己的问题:根据https://github.com/joyent/node/issues/1514 ,答案为no,但是您可以使用request模块http://search.npmjs.org/#/request,支持代理。