Node.js http.request()返回响应出现乱码的解决方案
来源:互联网 发布:淘宝店家信誉等级 编辑:程序博客网 时间:2024/06/05 18:25
之前用Node.js做个小程序,来实现校园网流量的查询,以及对我校bt种子区搜索条目刷单。当时用的是http.request(option,callback)
方法,但返回的请求出现了乱码的问题,这可把我给愁坏了。后来找到了方法,在这分享以方便遇到同样问题的同学。
首先,show the code:
var http=require('http');var options={ hostname:'...', port:80, path:'/bt.php?'+searchstring, method:'GET'};var req=http.request(options,(res)=>{ var header=res.headers; console.log(`STATUS: ${res.statusCode}`); console.log(`HEADERS: ${JSON.stringify(res.headers)}`); res.setEncoding('utf8'); var html=''; res.on('data',(data)=>{ html+=data; }) res.on('end',()=>{ console.log(html); })});req.on('error',error=>{console.log("error:"+error.message)});//req.write(searchstring);//因为我用的是get方法,所以并不用写数据到请求头req.end();
这样写貌似没有问题,但实际运行的时候却发现返回的响应数据是乱码,那怎么办,得找原因吧,按我为数不多的经验来讲一般是编码的问题,但代码中我明确指定了所用编码方式为“utf8”而且响应头中字符编码方式确实是“utf8”,不信你看返回的响应头:
HEADERS: {"server":"Tengine","date":"Fri, 17 Feb 2017 14:03:58 GMT","content-type":"text/html; charset=utf-8","transferencoding":"chunked","connection":"keep-alive","set-cookie":[/*略去*/],"content-encoding":"gzip","vary":"Accept-Encoding"}
那是什么原因那?我注意到内容编码方式为“gzip”,gzip压缩方式不就是压缩html、css、js文件什么的,减少体积以加快响应嘛。难道是它的问题?是因为gzip压缩使得返回的内容无法用utf8全部解出来导致出现乱码吗?当时我是半信半疑,先抱着试试的态度找下解决方案,费了好大功夫终于在stackoverflow中找到了解决方案(How to use request or http module to read gzip page into a string),看来还是stackoverflow大法好,最终解决方案如下:
var req=http.request(options,(res)=>{ var header=res.headers; console.log(`STATUS: ${res.statusCode}`); console.log(`HEADERS: ${JSON.stringify(res.headers)}`); var html='',output; if(res.headers['content-encoding']=='gzip'){ var gzip=zlib.createGunzip(); res.pipe(gzip); output=gzip; }else{ output=res; } output.on('data',(data)=>{ data=data.toString('utf-8'); html+=data; }); output.on('end',()=>{ console.log(html); })});req.on('error',error=>{console.log("error:"+error.message)});req.end();
就这样我成功解决了一大难题,哈哈哈!
阅读全文
0 0
- Node.js http.request()返回响应出现乱码的解决方案
- 【Node.JS】window下nodejs爬取gbk/gb2312网页出现乱码的解决方案
- node.js http中请求request和响应response信息说明
- node.js的http模块输出request参数
- js参数中文出现乱码的解决方案
- node.js+android http请求响应
- node.js+android http请求响应
- node.js+Android http请求响应
- node.js+Android http请求响应
- Node.js http模块 设置响应头
- Node.js的request模块
- node.js的request模块
- HTTP请求json文件出现中文乱码的解决方案
- http request乱码的真相
- http request乱码的真相
- http request乱码的真相
- http request乱码的真相
- http request 乱码的真相
- Torch学习笔记(一)
- MarkDown语法入门指南(转载)
- [Unity&数组&List&JSON]创建一个字符串数组string[]类型的list
- JDK-include
- 4881: [Lydsy2017年5月月赛]线段游戏
- Node.js http.request()返回响应出现乱码的解决方案
- 数据库优化——备份与恢复
- org.json.JSONException: No value for
- 将字符串转换为float类型
- Base64(四)
- HDU 1202 The calculation of GPA
- HDU1532(最大流EK算法模板题)
- LeetCode:553. Optimal Division
- HTML5 WebStorage