我想为一些我不是管理员的XYZ服务器设置代理。然后我想对请求和响应头部进行一些分析,然后对请求和响应主体进行分析。所以我使用http-proxy https://github.com/nodejitsu/node-http-proxy
这就是我所做的:
var proxy = httpProxy.createProxyServer();
connect.createServer(
connect.bodyParser(),
require('connect-restreamer')(),
function (req, res) {
proxy.web(req, res, { target : 'XYZserver' });
}
).listen(config.listenPort);
字符串
直到GET请求,一切都很好,但每当一个请求与一些机构,如POST,PATCH,PUT等请求,我得到错误:
Error: socket hang up
at createHangUpError (http.js:1472:15)
at Socket.socketCloseListener (http.js:1522:23)
at Socket.EventEmitter.emit (events.js:95:17)
at TCP.close (net.js:466:12)
型
我谷歌了很多,但没有发现任何线索是什么错了。我启用套接字代理与'ws:true'选项的'proxy.web',但仍然是同样的错误。
8条答案
按热度按时间fd3cxomn1#
我也遇到过类似的问题,通过将代理代码移到其他节点中间件上解决了这个问题。
例如:
字符串
不是这个:
型
我的具体问题是在代理之上有BodyParser中间件。我没有做太多的挖掘,但它一定以某种方式修改了请求,当请求最终到达它时,它破坏了代理库。
ffscu2ro2#
为了完整起见,模块
body-parser
和http-proxy
之间确实存在集成问题,如this线程中所述。如果你不能改变中间件的顺序,你可以在拒绝请求之前restream解析的主体。
字符串
我在这个问题上花了2天时间。希望它能帮上忙!
9q78igpj3#
需要捕捉代理的错误:
字符串
sd2nnvve4#
在浪费了一天多的时间,并遵循了nodejitsu/node-http-proxy issues中的一些帖子之后,我能够让它工作,这要感谢riccardo.cardin。我决定发布完整的示例来保存你的时间。下面的示例使用服务器express,body-parser(请求。主体中间件),当然还有http-proxy来代理和转发请求到第三方服务器。
字符串
yi0zb3m45#
http-proxy
似乎与body-parser
中间件不兼容。您可能希望将http-proxy
中间件移到body-parser
之前或停止使用body-parser
。标签:Socket hangup while posting request to Node-http-proxy Node.js
sg2wtvxw6#
我在 post,put 和 delete 时遇到了这个问题,但在从chimurai / http-proxy-middleware读取this issue后,我已经做到了。
1-添加onProxyReq:https://github.com/chimurai/http-proxy-middleware/issues/40#issuecomment-249430255
2-需要注意的是,在请求头中需要添加Content-Type:application/json
**3-**没有body解析器的更改顺序
nwsw7zdq7#
http-proxy-middleware
是一个使用http-proxy
的类似软件包,它是专门为以下目标创建的:轻松配置代理中间件,用于连接、快速、浏览器同步等。
这个包继承了body解析器的相同问题,但是,修复(
fixRequestBody
)包含在包中。这里是文档中的一个例子。字符串
mnemlml88#
对于
Post
请求,此错误可能是由bodyParser
消耗的stream
引起的。您需要重新创建流并将其传递给代理。字符串