Python POST实现发送Ajax的两个坑

今天给写的应用做测试,服务器单元测试搞定了,要做功能测试和验收测试

功能测试需要模拟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的方法帮我发个链接呗



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值