首页 > 代码库 > 使用GBK编码请求访问nodejs程序报415错误:Error: unsupported charset at urlencodedParser ...
使用GBK编码请求访问nodejs程序报415错误:Error: unsupported charset at urlencodedParser ...
最近遇到一个问题,第三方用户向我们提供给的回调地址发送请求时一直报415错误,结果发现他们使用的是GBK编码请求,而我们使用的node + express4 程序,不支持GBK编码请求。
问题出在下面一段代码。
app.use(bodyParser.json());app.use(bodyParser.urlencoded({extended: false})); //这一行
查看body-parser源码,发现引起问题的一段代码如下
var charset = typer.parse(req).parameters.charset || ‘utf-8‘ if (charset.toLowerCase() !== ‘utf-8‘) { var err = new Error(‘unsupported charset‘) err.status = 415 next(err) return }
网上查了不少资料,有的说要注释掉源码的这个判断,有的说要更换body-parser版本,等等,但是我觉得这些方法都不好。
后来我把对方的请求header截获了,发现关键的一句是这样的
"content-type":"application/x-www-form-urlencoded;charset=GBK"
好在他们请求的参数都是英文和数字,我想到能不能把GBK替换成utf8呢,于是写了下面的代码解决了问题。
//使用了gbk编码,会报错,在这里拦截处理一下app.use(function (req, res, next) { if (req.headers[‘content-type‘] && req.headers[‘content-type‘].indexOf(‘GBK‘) > -1) { req.headers[‘content-type‘] = req.headers[‘content-type‘].replace(‘GBK‘, ‘UTF-8‘); } next();});app.use(bodyParser.json());app.use(bodyParser.urlencoded({extended: false})); //这一行
使用GBK编码请求访问nodejs程序报415错误:Error: unsupported charset at urlencodedParser ...
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。