我有一个curl请求和使用python请求模块到本地Web服务的类似请求。当curl请求正常工作时,通过python发出的请求未按预期工作,即未返回json响应。
有什么想法为什么会这样?使用python我仍然收到200响应,但是获取HTML响应文本而不是json(例如curl),并且该响应与无效会话等有关。
这是卷曲的要求
root@weve1:~$ curl -k --GET --data "ajax=getPermissions&project=test&session.id=5604d7ce-f3dd-4349-8957-563c2675ae5c" http://localhost:12320/manager
{
"permissions" : [ {
"permission" : [ "ADMIN" ],
"username" : "azkaban"
} ],
"project" : "test",
"projectId" : 92
}
这是在python中提出的相同请求
root@weve1:~$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> s=requests.get('http://localhost:12320/manager',data={'ajax':'getPermissions','project':'test','session.id':'5604d7ce-f3dd-4349-8957-563c2675ae5c'})
>>> s.json()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/requests/models.py", line 741, in json
return json.loads(self.text, **kwargs)
File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
>>>
从curl手册页:
-G/--get
使用此选项时,将使用-d /-data或--data-binary指定的所有数据用于HTTP GET请求中,而不要使用否则将使用的POST请求。数据将以'?'附加到URL。分隔器。
因此curl实际上将参数作为查询字符串传递,即http://localhost:12320/manager?ajax=getPermissions&project=test&session.id=5604d7ce-f3dd-4349-8957-563c2675ae5c
。
为了通过请求在URL中传递数据,您需要在params
参数中传递数据:
data = { 'ajax': 'getPermissions', 'project': 'test', 'session.id': '5604d7ce-f3dd-4349-8957-563c2675ae5c' }
s = requests.get('http://localhost:12320/manager', params=data)
该data
参数仅指实际的请求主体。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句