Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python请求“;“证书验证失败”;_Python_Python Requests - Fatal编程技术网

Python请求“;“证书验证失败”;

Python请求“;“证书验证失败”;,python,python-requests,Python,Python Requests,我正在维护一个使用请求+HTTPS的Python迷你应用程序 该应用程序一直工作,直到HTTPS URL中主机名的IP地址(合法)发生更改。如果我将浏览器指向URL,我可以很好地检索它 Python/requests将ssh的已知_主机的模拟保存在何处?如何为该主机清除它 $ python --version Python 2.7.3 $ cat foo.py import requests url = "https://somehost/resource.json" requests.ge

我正在维护一个使用请求+HTTPS的Python迷你应用程序

该应用程序一直工作,直到HTTPS URL中主机名的IP地址(合法)发生更改。如果我将浏览器指向URL,我可以很好地检索它

Python/requests将ssh的已知_主机的模拟保存在何处?如何为该主机清除它

$ 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
$python--版本
Python 2.7.3
$cat foo.py
导入请求
url=”https://somehost/resource.json"
get(url,timeout=5,config={'danger\u mode':True})
$source venv/bin/激活
$python foo.py
回溯(最近一次呼叫最后一次):
文件“foo.py”,第3行,在
get(url,timeout=5,config={'danger\u mode':True})
get中的文件“/home/dfukdev/corsair scripts/alfred/venv/local/lib/python2.7/site packages/requests/api.py”,第65行
返回请求('get',url,**kwargs)
文件“/home/dfukdev/corsair scripts/alfred/venv/local/lib/python2.7/site packages/requests/safe_mode.py”,第39行,包装
返回函数(方法、url、**kwargs)
文件“/home/dfukdev/corsair scripts/alfred/venv/local/lib/python2.7/site packages/requests/api.py”,第51行,请求中
return session.request(method=method,url=url,**kwargs)
请求中的文件“/home/dfukdev/corsair scripts/alfred/venv/local/lib/python2.7/site packages/requests/sessions.py”,第241行
r、 发送(预回迁=预回迁)
文件“/home/dfukdev/corsair scripts/alfred/venv/local/lib/python2.7/site packages/requests/models.py”,第641行,在send中
升起SSLError(e)
requests.exceptions.SSLError:[Errno 1]\u ssl.c:504:错误:14090086:ssl例程:SSL3\u GET\u SERVER\u证书:证书验证失败

您使用的是一个古老版本的请求。如果升级到2.0,您将收到一条更有用的消息,如果您的站点存在证书不匹配,您可以通过指定系统证书来修复它,该证书将能够验证中间证书。您也可以让请求不按照Andre的建议验证您的证书。

事实证明,在问题中提到的服务器升级过程中,安装了一个签名不正确的证书。由于Windows浏览器机器和Ubuntu Python客户端之间的根证书差异,浏览器中的HTTPS工作正常。通过运行Python的同一台Ubuntu机器上的浏览器HTTPS显示了证书问题的详细信息

知识产权的变化与这个问题没有什么关系,只是混淆了一些东西

将我的评论提升为回答:

  • 这回答了我的问题
  • 这个问题得到了足够的流量,我想与大家分享这方面的知识

  • 如果上面的方法不起作用,而你发现它是本地的,那么这个解决方案对我有效

    基本上运行Python文件夹中的Install Certificates.command文件


    我不知道为什么证书无效,但作为一种解决方法,您可以使用
    requests.get(url,timeout=5,config={'danger\u mode':True},verify=False)
    忽略中提到的SSL证书。@AndréDaniel是否已删除
    config
    ?我在链接页面上没有看到它,我的python声称它是未知的。而且,
    verify=False
    本身似乎不起作用…@RandolphCarter我刚看了页面,它仍然在那里,搜索“SSL证书”(我很想给你一个直接链接,但我在我的手机上,不能真的这么做)…@AndréDaniel啊,是的,
    verify
    仍然在那里。我在脚本中错过了第二个requeests.get语句,也抛出了该错误;)<代码>配置={'danger_mode':True}不再是必需的,但是-如果我读取正确,它现在是默认值。感谢您闪电般的回复!事实证明,在服务器升级中安装了未签名或签名不正确的证书。由于两个操作系统之间的根证书差异,浏览器中的HTTPS在Windows计算机上工作。IP的变化与此几乎没有关系(除了混乱的事情)。