文章目录
  1. 1. 描述
  2. 2. 解决

描述

这周遇到一个bug使用python的requests lib单独运行脚本post数据就成功,结果使用django调用该函数就出问题。在后台打印log发现django调用的时候request.body丢失了部分数据。

代码类似:

1
2
3
4
5
body=dict()
body['token']='23sdcwo81mdvlpwcva'
body['content']='信息'
...
request.post(data = json.dumps(data,ensure_ascii=False))

原因是单独调用代码的时候发送的body数据内容都是str类型,而Django调用的时候引入了unicode类型。

1
2
3
4
test = 'test'
print type(test) #str
test = 'test' + unicode('test')
print type(test) #unicode

解决

这个跟python的自身编码问题有关,python3加requests能够解决这个问题,但是项目是python2.7的所以用其它方式解决。在requests lib断点调试下会发现init.py—> api.py—>models.py

1
self.headers['Content-Length'] = builtin_str(l) #477 line

将body内的数据转化为str类型解决,或者在增加headers解决

1
request.post(data = json.dumps(data,ensure_ascii=False),headers={'Content-Length':str(len(data))})
文章目录
  1. 1. 描述
  2. 2. 解决