[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?

时间: 2024-11-03 05:29:13

[python]如何在requests post时不做urlencode?的相关文章

python列表中添加对象时的注意

最近在用python写代码,用到了对象数组.在c++中我们要使用能够灵活操作的对象数组,一般会用stl的vector类,该类的push_back方法可以将一个对象的拷贝加入到vector对象中,所以当使用[]下标对vector的元素进行修改时,原来的作为push_back参数的那个对象的值并不会改变.python中类似的方法是列表的append方法,但是要注意此时若加入到列表中的是基础数据类型,则是值传递,若是对象,则是引用传递.这种参数的传递方式和java一样.因此,在python中通过列表下

python第三方库requests简单介绍

一.发送请求与传递参数 简单demo: import requests r = requests.get(url='http://www.itwhy.org') # 最基本的GET请求 print(r.status_code) # 获取返回状态 r = requests.get(url='http://dict.baidu.com/s', params={'wd':'python'}) #带参数的GET请求 print(r.url) print(r.text) #打印解码后的返回数据 1.带参数

iOS Dev (63) 如何在 TableView 滚动时收起键盘?

iOS Dev (63) 如何在 TableView 滚动时收起键盘? 作者:阿锐 地址:http://blog.csdn.net/prevention - - (void)scrollViewDidScroll:(UIScrollView *)scrollView { [_inputTextView resignFirstResponder]; } - 转载请注明来自:http://blog.csdn.net/prevention iOS Dev (63) 如何在 TableView 滚动时收

Python 2.7安装setuptools时的UnicodeDecodeError解决办法

我猜~~~很多一开始学习python的同学们一定也遇到了这个问题,在安装setuptools时候会遇到UnicodeDecodeError的错误. 我学的是3.x,但是周围的人都说2.7好,╮(╯▽╰)╭一开始我也不在乎,但是工作需要使用mongodb,但是它的包暂时只有2.7,我点点点点. 无奈我也就换了版本,改为2.7,但是问题来了,当我想安装setuptools的时候,恶心的错误来了.真的不知道安装这种成熟的工具还有这种问题. 在经过各种谷哥.度娘之后,有的说在代码中制定编码,试了不行,有

Python包的相对导入时出现“ ‘Parent module ' not loaded, cannot perform relative import”的解决方法

在练习Python中package的相对导入时,即 from . import XXX 或者 from .. import XXX 时会遇到这样两个错误: SystemError: Parent module '' not loaded, cannot perform relative import 和 ValueError: attempted relative import beyond top-level package 其实这两个错误的原因归根结底是一样的:在涉及到相对导入时,packa

Python第三方库Requests学习

1.安装 1 git clone git://github.com/kennethreitz/requests.git 2 cd requests 3 python setup.py install 2.上点威力 (GET) 1 >>> import requests 2 >>> url = 'http://dict.baidu.com/s' 3 >>> payload = {'wd':'python'} 4 >>> r = requ

如何在tomcat启动时加载一个类

Tomcat启动时classloader加载顺序 Tomcat的class加载的优先顺序一览   1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件.   2.环境变量CLASSPATH中的jar和class文件.   3.$CATALINA_HOME/common/classes下的class文件.   4.$CATALINA_HOME/commons/endorsed下的jar文件.   5.$CATALINA_HOME/commons/i18n下的jar文件.   6.

当你无聊时可以做这15件高效的事

有很多有意义的事可以在无聊时做.在 Quora 上,用户 Visakan Veerasamy 建议发挥“消除”的作用.我把这一理论更进一步,扩大到包括两个其他类型的活动.基于消除.消费.工作的原则,在无聊的时候,有15件高效的事可以做. 1. 消除混乱 你不像自己预期的那样多产的一个原因,可能是你有太多乱七八糟的事情.无聊时可以做的有意义的事情,包括整理你的桌子.从书架上取下你从来不读的书.删除你智能手机上从来不用的应用.你不仅仅是在做一些清扫工作,这些事情可能会给你能量,让你能够开始后面的更大

Python输出中文到文件时的字符编码问题

今天在使用Python的GUI平台wxPython时,写了一个只有打开.编辑.保存功能的简易笔记本,代码如下: 1 #coding:utf-8 2 import wx 3 4 def load(event): 5 f = open(FileName.GetValue()) 6 Contents.SetValue(f.read()) 7 f.close() 8 9 def save(event): 10 f = open(FileName.GetValue(), 'w') 11 f.write(C