码迷,mamicode.com
首页 > 编程语言 > 详细

[python]如何在requests post时不做urlencode?

时间:2014-06-05 05:28:23      阅读:839      评论:0      收藏:0      [点我收藏+]

标签:python   requests   post   urlencode   

    这两天要为公司一个项目的服务端写性能测试脚本,其中有一个请求订单号的接口,需要客户端用post请求向服务端发送加密过的token 和订单数据。代码如下:

payload = {‘token‘:token,‘order_data‘:order_data}

r = requests.post(url, data=payload}

但是,服务端返回错误,花了很长时间检查了token和order_data的加密算法,确认没错;

查了下文档,上面有这样一句话:

There are many times that you want to send data that is not form-encoded. If you pass in a string instead of a dict, that data will be posted directly.

所以,只要直接传一个string作为payload数据,requests就不会做任何转换,直接发出去。
这样,代码就改为:
payload = "token="+token+"&order_data="+order_data
r = requests.post(url, data=payload}

但是,奇怪的是,服务端还是报错。

后来只好换用curl来发
cmd = ‘curl -d \"token=‘ +token+‘&json_data=‘+str_json+‘\" ‘+url
os.system(cmd)
这样是成功的

那用requests到底错在什么地方呢?

用wireshark抓包发现:
用reqeusts和curl发送的数据都是一样的,但是,curl有带一个header:"Content-Type": "application/x-www-form-urlencoded"
看来requests也需要加上这个头:

headers = {"Content-Type": "application/x-www-form-urlencoded"}
r = requests.post(url, data=payload, headers=headers)

这样就OK了

[python]如何在requests post时不做urlencode?,布布扣,bubuko.com

[python]如何在requests post时不做urlencode?

标签:python   requests   post   urlencode   

原文地址:http://blog.csdn.net/u012973744/article/details/27187253

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!