http请求,服务器回复内容为乱码的一种可能解决方法
使用Fiddler监控手机的网络流量,照抄某一软件的http请求(header和body完全相同),使用nodejs的request发出同样的请求,本来期待获得和Fiddler中看到的一样的JSON数据.
但却获得了一堆乱码:
使用gedit打开,尝试各种编码方式,都是乱码。
使用decrypt.js尝试解码,报错为:Malformed UTF-8 data。
打印response header后,发现其中'transfer-encoding': 'chunked'这一项在fiddler中并没有
https://imququ.com/post/transfer-encoding-header-in-http.html
在这篇transfer-encoding的科普文的最后,发现和gzip有关系。
最后在这里找到了解决方案(https://stackoverflow.com/questions/12148948/how-do-i-ungzip-decompress-a-nodejs-requests-module-gzip-response-body)
在header中设置了encoding: null,并把原来header中的
Accept-Encoding 和 Content-Length 删除之后,再也没有出现过乱码的情况。
另外,如果做了以上修改后,发现服务器对某个node的http请求回复一个404的html,但在Fiddler中可以看到正常JSON数据的话,可以尝试把header中的 Content-Length 删除。这种情况可能是因为实际需要回复给你的数据太大,但你的请求头中的Content-Length过小,对于未知数据大小的回复,最好尝试把请求头中的这项删除。