python 跳过urlencode_[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 stringinstead

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了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值