美文网首页
Bottle关于使用post提交且在Body中包含有json格式

Bottle关于使用post提交且在Body中包含有json格式

作者: 小钟钟同学 | 来源:发表于2018-05-23 00:22 被阅读40次

背景

因为业务需要,部分的数据来自厂家异步通知,厂家使用的是POST方式提交相关json串过来。
提交过来的时候:日志里使用


image.png

这种方式记录日志,再windows上本地调试的时候写入会报错,引起无法写入。
而再linux上写入是正常可以写入,不会报错!但是记录到的信息会有乱码:

image.png

而再windows写入日志信息报错的信息如下:

--- Logging error ---
Traceback (most recent call last):
  File "D:\Python35-32\lib\logging\__init__.py", line 982, in emit
    stream.write(msg)
UnicodeEncodeError: 'gbk' codec can't encode character '\xe5' in position 1329: illegal multibyte sequence
Call stack:

大概原因就是使用:

urllib.parse.unquote(str(request.params.__dict__)

-------2018年5月24日 23:50:05 更新------
尝试解决方案:
在对unicode字符编码时,添加ignore参数,忽略无法无法编码的字符,这样就可以正常编码为GBK了
如: 你的字符串.encode(“GBK“, ‘ignore’);

urllib.parse.unquote(str(request.params.__dict__).encode('GBK', 'ignore'))

但是上面的这种方式会把整个的所有的字符串都给忽略了!!!

本地模拟异步通知

使用POSTMAN进行模拟提交:

第一步,设置相关的头部信息:

image.png

第二步:Body中选中RAW提交相关json串

image.png

提交测试:(因为json有一定的顺序要求)

第一种:request.POST提取json传的方式

  for lkk in request.POST:
        if lkk:
            jsjdsjj = lkk
    print(lkk)

打印出来的结果是:


image.png

第二种:request.json提取json传的方式

而使用request.json读取的方式,虽然说不会出现乱码,但是因为需要排序,而且顺序不能乱,因为加密的时候用到!!!

str(request.json)

第三种:request.body.readlines()提取json传的方式

结果转换到字符串的时候报错了!!

第四种:request._get_body_string()和data= request.body.read()提取json传的方式

发现这个方法可以哟!!!妈蛋!不过他获取出来的数据是会换行的!


image.png

需要进行替换一下:

str(data, encoding="utf-8").replace('\r\n','').replace('    ', '')

相关文章

网友评论

      本文标题:Bottle关于使用post提交且在Body中包含有json格式

      本文链接:https://www.haomeiwen.com/subject/billjftx.html