Python POST实现发送Ajax的两个坑
2015-09-10 23:50
459 查看
今天给写的应用做测试,服务器单元测试搞定了,要做功能测试和验收测试
功能测试需要模拟Ajax,验收测试需要Selenium,我之前的Selenium都是用Python,一想的话那就都用Pyhton了
结果一上来就掉到了Python的坑里,google了一下,主要有两个库实现了AJAX POST
1、urllib
2、requests
代码我就不贴了,反正都TM有问题。
这两个库的问题是,我用Python写了一个字典,字典的内容是我要发的数据
两个库都会用类似这样的一个函数来发起
POST到服务器的数据会出现解析问题,如果是使用$.ajax来post数据,服务器var_dump出来的数据格式是
下面是urllib库的
发现问题了吗,会把二级字典里面的值转成json
下面是requests库里面的,这个更离谱一些
反正这两个坑坑了我一下午,所以记下来,你们要是正好在做这个,碰到这两个坑记得绕道走
我现在的解决方案是,直接用Selenium模拟Ajax请求,你们要是有原生的Python的方法帮我发个链接呗
功能测试需要模拟Ajax,验收测试需要Selenium,我之前的Selenium都是用Python,一想的话那就都用Pyhton了
结果一上来就掉到了Python的坑里,google了一下,主要有两个库实现了AJAX POST
1、urllib
2、requests
代码我就不贴了,反正都TM有问题。
这两个库的问题是,我用Python写了一个字典,字典的内容是我要发的数据
{"data": {"a":"b"}, "test": {"temp": "moduomoduo"}}
两个库都会用类似这样的一个函数来发起
post(url, data)
POST到服务器的数据会出现解析问题,如果是使用$.ajax来post数据,服务器var_dump出来的数据格式是
array(2) { ["data"]=> array(1) { ["a"]=> string(1) "b" } ["test"]=> array(1) { ["temp"]=> string(10) "moduomoduo" } }以上是正确的数据格式,就是当使用$_POST取出数据的时候,就是数组了
下面是urllib库的
array(2) { ["test"]=> string(22) "{'temp': 'moduomoduo'}" ["data"]=> string(10) "{'a': 'b'}" }
发现问题了吗,会把二级字典里面的值转成json
下面是requests库里面的,这个更离谱一些
array(2) { ["test"]=> string(4) "temp" ["data"]=> string(1) "a" }只取了二级字典的Key值,而且只取第一个Key值,这个在requests 2.7.0的版本存在,github上自己也开了issue说有问题,不过看发起者的意思是劳资不想改了,你们来改吧
反正这两个坑坑了我一下午,所以记下来,你们要是正好在做这个,碰到这两个坑记得绕道走
我现在的解决方案是,直接用Selenium模拟Ajax请求,你们要是有原生的Python的方法帮我发个链接呗
相关文章推荐
- Android之使用Http协议实现文件上传功能
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例