zoukankan      html  css  js  c++  java
  • 使用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})); //这一行
  • 相关阅读:
    关于Python3.7和Python3.6中元组类型数据内存存储问题
    PHP中的语法特点小结
    PHP中的魔术常量
    Python02期(北京)课程笔记索引
    初识python
    Django项目功能执行逻辑流程图之用户页面信息展示和添加
    Django中的Model模型
    浅谈web开发以及django的安装和入门
    对前面知识的重新理解
    8月26号
  • 原文地址:https://www.cnblogs.com/fhen/p/5828240.html
Copyright © 2011-2022 走看看