2016-06-28 274 views
0

我是cURL和Requests的新手,我对如何将cURL请求转换为Python中的Requests命令表示怀疑。将cURL命令转换为Python请求命令

看着阿帕奇Stratos的文档Doc Page来对服务器进行登录,在卷曲你使用:

curl -X GET -H "Content-Type: application/json" -k -v -u admin:admin https://localhost:9443/api/session 

而且它工作在终端上。现在,我想在我的Django网站上做同样的事情,并将curl URL转换为python代码,并使用模块“requests”,我不知道如何传递用户信息并传递信息。

,我现在所拥有的代码是:

headers = {'Content-Type':'application/json'} 
data = {} 
req = requests.post('https://localhost:9443/api/session', headers=headers, params=data) 

但我不知道如何通过用户名和密码,所以我想这(Requests Python Login Tutorial

data = {"username":"admin","password":"admin"} 

但我得到一个证书从服务器错误:

File "/usr/lib/python2.7/dist-packages/requests/adapters.py", line 385, in send raise SSLError(e) 
requests.exceptions.SSLError: [Errno 1] _ssl.c:510: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 

所以,我发送正确的用户名和密码?我如何解决证书错误?

感谢和问候

+0

你在本地主机上。使用SSL绝对重要吗?试试'http:// localhost:9443/api/session'。 Python请求实际上处理SSL非常流畅,但本地主机上的有效SSL证书似乎不太可能。 –

+0

是的,文档页面上的所有URL都使用Https,当您访问Firefox上的登录页面时,您需要添加安全异常以查看页面。 – Aker666

+0

看起来你有两个答案可供选择:) –

回答

2

可以turn off SSL cert verificationverify标志,并通过指定auth使用basic authentication

from requests.auth import HTTPBasicAuth 

req = requests.post('https://localhost:9443/api/session', headers=headers, auth=HttpBasicAuth('admin', 'admin'), verify=False) 

查看requests docs了解更多信息。

+0

是的,我在@Sam回答后发现它。但是,无论如何感谢:) – Aker666

2

您在使用本地主机几乎肯定没有一个有效的证书。

出于测试目的禁用SSL验证(它仍然是加密只是没有验证证书)

req = requests.post('https://localhost:9443/api/session', headers=headers, params=data, verify=False) 
+0

'verify = False'很好。 –

+0

谢谢,我不知道这个标志! – Aker666

0

的@Sam解决方案后,并找上了我Requests Auth Doc Page找到了解决方案:

Python的Resquest代码是:

requests.get('https://localhost:9443/api/session', headers=headers, auth=HTTPBasicAuth('admin', 'admin'), verify=False) 

的 “PARAMS” IT领域是没有必要的。

然后:

u'{"Success":{ "sessionId": "547D78FD4966DDBE21AEFDAECE909DEC"}}' 

希望它可以帮助别人!