您的位置:首页 > 编程语言 > Python开发

Python POST实现发送Ajax的两个坑

2015-09-10 23:50 459 查看
今天给写的应用做测试,服务器单元测试搞定了,要做功能测试和验收测试

功能测试需要模拟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的方法帮我发个链接呗
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python Ajax POST 测试