CURL在Python中的等价物

时间:2017-11-20 11:36:56

标签: python-3.x curl python-requests

我试图在我的Python代码中编写curl等价物。

curl -i -u username:password -H "Content-Type: application/json;charset=utf-8" -X POST -d '{"id_no":"7877"}' https://host/XXXX/ -k

在哪里,我有我的用户名,密码和主机详细信息。

我的Python代码如下:

headers = {'Content-Type': 'application/json;charset=utf-8'}
parameter = {'id_no': 7877}
p_response = requests.post(url,auth=('username', 'password'), headers=headers,params=parameter) 

但是,我收到以下错误:

requests.exceptions.SSLError: HTTPSConnectionPool(host='host', port=443): Max retries exceeded with url: /id_no/?id_no=7877 (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:748)'),))

有人可以告诉我这些变化吗?

1 个答案:

答案 0 :(得分:1)

您在curl命令中使用了-k标志(告诉它不要验证SSL),但您确实为requests.post提供了相应的kwarg。

使用verify=False

此外,由于您在-d上使用了curl标记,因此您需要使用data kwarg requests。{/ p>

p_response = requests.post(url, auth=('username', 'password'), 
                           headers=headers, data=parameter,
#                                           ^
                           verify=False)
#                          ^

curl docs

  

-k,--insecure

     

(TLS)默认情况下,验证每个SSL连接卷曲   安全。此选项允许卷曲继续进行,甚至可以为服务器操作   否则被视为不安全的连接。

     

通过确认服务器来验证服务器连接   证书包含正确的名称并验证是否成功使用   证书商店。

     

有关详细信息,请参阅此在线资源:   https://curl.haxx.se/docs/sslcerts.html

     

另见--proxy-insecure和--cacert。

requests docs:

  

如果设置,请求也可以忽略验证SSL证书   验证为False: