【发布时间】:2013-09-30 17:25:45
【问题描述】:
我正在维护一个使用请求 + HTTPS 的 Python 迷你应用程序。
应用程序一直运行,直到 HTTPS URL 中主机名的 IP 地址发生更改(合法地)。如果我将浏览器指向该 URL,我可以很好地检索它。
Python/requests 将 ssh 的 known_hosts 类比保存在哪里,我如何为这个主机清除它?
$ python --version
Python 2.7.3
$ cat foo.py
import requests
url = "https://somehost/resource.json"
requests.get(url, timeout=5, config={'danger_mode': True})
$ source venv/bin/activate
$ python foo.py
Traceback (most recent call last):
File "foo.py", line 3, in <module>
requests.get(url, timeout=5, config={'danger_mode': True})
File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/api.py", line 65, in get
return request('get', url, **kwargs)
File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/safe_mode.py", line 39, in wrapped
return function(method, url, **kwargs)
File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/api.py", line 51, in request
return session.request(method=method, url=url, **kwargs)
File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/sessions.py", line 241, in request
r.send(prefetch=prefetch)
File "/home/dfukdev/corsair-scripts/alfred/venv/local/lib/python2.7/site-packages/requests/models.py", line 641, in send
raise SSLError(e)
requests.exceptions.SSLError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
【问题讨论】:
-
我不确定为什么证书无效,但作为一种解决方法,您可以使用
requests.get(url, timeout=5, config={'danger_mode': True}, verify=False)忽略 Requests advanced usage documentation 中提到的 SSL 证书。 -
@AndréDaniel 删除了
config吗?我在链接页面上看不到它,我的 python 声称它是未知的。并且verify=False单独似乎并不能解决问题...... -
@RandolphCarter 我刚刚查看了该页面,它仍然存在,搜索“SSL Cert”(我很想给你一个直接链接,但我在我的手机上,真的不能这样做)...
-
@AndréDaniel 啊,是的,
Verify还在。我在我的脚本中错过了第二个 reqeuests.get 语句,也抛出了该错误;)。但是,config={'danger_mode': True}不再需要了 - 如果我正确阅读了this,它现在是默认设置。感谢您闪电般的快速响应!