博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用GBK编码请求访问nodejs程序报415错误:Error: unsupported charset at urlencodedParser ......
阅读量:5886 次
发布时间:2019-06-19

本文共 1023 字,大约阅读时间需要 3 分钟。

最近遇到一个问题,第三方用户向我们提供给的回调地址发送请求时一直报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})); //这一行

 

转载于:https://www.cnblogs.com/fhen/p/5828240.html

你可能感兴趣的文章
【转】在控制台、WinForm项目中的嵌入mdf文件的烦恼
查看>>
android The project target (Android 2.3.3) was not properly loaded
查看>>
【转】EDK简单使用流程(3)
查看>>
[python] 伪私有属性,防止变量名冲突
查看>>
loj#2538. 「PKUWC2018」Slay the Spire
查看>>
在jsp中嵌入javascript代码执行对html的影响方式
查看>>
redhat安装opencv
查看>>
十进制与其他进制转换
查看>>
web端测试小知识
查看>>
8.30 牛客OI赛制测试赛1 F题 子序列
查看>>
.NET中<asp:MultiView>选项卡控件的用法
查看>>
为什么用bower 安装bootstrap而不用npm来安装?
查看>>
通过游戏来学习CSS的Flex布局
查看>>
Firefly加入OPEN AI LAB生态计划,推出AI开源主板
查看>>
递归函数实现方法
查看>>
[转]Windows7 64bit下配置Apache+PHP+MySQL
查看>>
CentOS6.5 下在Nginx中添加SSL证书以支持HTTPS协议访问
查看>>
给trac的ticket添加提交时字段验证
查看>>
nodejs安装-配置
查看>>
Node.js学习-1
查看>>