Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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中发出get请求时持续获取SSL错误_Python_Python 3.x_Ssl_Python Requests_Pyopenssl - Fatal编程技术网

在python中发出get请求时持续获取SSL错误

在python中发出get请求时持续获取SSL错误,python,python-3.x,ssl,python-requests,pyopenssl,Python,Python 3.x,Ssl,Python Requests,Pyopenssl,我提出一个简单的get请求,如下所示: import requests response = requests.get('url') 并且它会在以下输出中出错: Traceback (most recent call last): File "/usr/lib/python3.6/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 417, in wrap_socket cnx.do_handshake()

我提出一个简单的get请求,如下所示:

import requests

response = requests.get('url')
并且它会在以下输出中出错:

Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 417, in wrap_socket
cnx.do_handshake()
File "/usr/lib/python3.6/site-packages/OpenSSL/SSL.py", line 1426, in do_handshake
self._raise_ssl_error(self._ssl, result)
File "/usr/lib/python3.6/site-packages/OpenSSL/SSL.py", line 1174, in _raise_ssl_error
_raise_current_error()
File "/usr/lib/python3.6/site-packages/OpenSSL/_util.py", line 48, in exception_from_error_queue
raise exception_type(errors)
OpenSSL.SSL.Error: [('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 594, in urlopen
chunked=chunked)
File "/usr/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 350, in _make_request
self._validate_conn(conn)
File "/usr/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 835, in _validate_conn
conn.connect()
File "/usr/lib/python3.6/site-packages/requests/packages/urllib3/connection.py", line 323, in connect
ssl_context=context)
File "/usr/lib/python3.6/site-packages/requests/packages/urllib3/util/ssl_.py", line 324, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "/usr/lib/python3.6/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 424, in wrap_socket
raise ssl.SSLError('bad handshake: %r' % e)
ssl.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/requests/adapters.py", line 423, in send
timeout=timeout
File "/usr/lib/python3.6/site-packages/requests/packages/urllib3/connectionpool.py", line 624, in urlopen
raise SSLError(e)
requests.packages.urllib3.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.6/site-packages/requests/api.py", line 70, in get
return request('get', url, params=params, **kwargs)
File "/usr/lib/python3.6/site-packages/requests/api.py", line 56, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/lib/python3.6/site-packages/requests/sessions.py", line 488, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3.6/site-packages/requests/sessions.py", line 609, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python3.6/site-packages/requests/adapters.py", line 497, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
>>>
回溯(最近一次呼叫最后一次):
文件“/usr/lib/python3.6/site packages/requests/packages/urllib3/contrib/pyopenssl.py”,第417行,在wrap_套接字中
cnx.do_握手()
文件“/usr/lib/python3.6/site packages/OpenSSL/SSL.py”,第1426行,在do_握手中
self.\u raise\u ssl\u错误(self.\u ssl,结果)
文件“/usr/lib/python3.6/site-packages/OpenSSL/SSL.py”,第1174行,在\u-raise\u-SSL\u错误中
_引发当前错误()
文件“/usr/lib/python3.6/site packages/OpenSSL/_util.py”,第48行,在错误队列的异常中
引发异常类型(错误)
OpenSSL.SSL.Error:[(“SSL例程”、“ssl3获取服务器证书”、“证书验证失败”)]
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
urlopen中的文件“/usr/lib/python3.6/site packages/requests/packages/urllib3/connectionpool.py”,第594行
分块=分块)
文件“/usr/lib/python3.6/site packages/requests/packages/urllib3/connectionpool.py”,第350行,在请求中
自我验证连接(连接)
文件“/usr/lib/python3.6/site packages/requests/packages/urllib3/connectionpool.py”,第835行,位于康涅狄格州
连接
文件“/usr/lib/python3.6/site packages/requests/packages/urllib3/connection.py”,第323行,在connect中
ssl(上下文=上下文)
文件“/usr/lib/python3.6/site packages/requests/packages/urllib3/util/ssl_uu.py”,第324行,在ssl_wrap_套接字中
返回context.wrap\u套接字(sock,server\u hostname=server\u hostname)
文件“/usr/lib/python3.6/site packages/requests/packages/urllib3/contrib/pyopenssl.py”,第424行,在wrap_套接字中
raise ssl.SSLError('握手错误:%r“%e”)
ssl.SSLError:(“握手错误:错误([(‘ssl例程’、‘ssl3_获取_服务器_证书’、‘证书验证失败’)),),)
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“/usr/lib/python3.6/site packages/requests/adapters.py”,第423行,在send中
超时=超时
urlopen中的文件“/usr/lib/python3.6/site packages/requests/packages/urllib3/connectionpool.py”,第624行
升起SSLError(e)
requests.packages.urllib3.exceptions.SSLError:(“握手错误:错误([('SSL例程','ssl3\u获取服务器\u证书','certificate verify failed'),),)
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
get中第70行的文件“/usr/lib/python3.6/site packages/requests/api.py”
返回请求('get',url,params=params,**kwargs)
文件“/usr/lib/python3.6/site packages/requests/api.py”,请求中的第56行
return session.request(method=method,url=url,**kwargs)
文件“/usr/lib/python3.6/site packages/requests/sessions.py”,第488行,在request中
resp=自我发送(准备,**发送)
文件“/usr/lib/python3.6/site packages/requests/sessions.py”,第609行,在send中
r=适配器.send(请求,**kwargs)
文件“/usr/lib/python3.6/site packages/requests/adapters.py”,第497行,在send中
raise SSLError(e,请求=请求)
requests.exceptions.SSLError:(“握手错误:错误([('SSL例程','ssl3\u获取服务器\u证书','certificate verify failed'),),)
>>>
我知道为了避免它,我可以简单地禁用验证,但这绝对不是正确的做法,也不是前进的方向,所以我想知道是否还有其他更好的解决方法

我将感谢任何帮助

编辑:


在上运行测试后,我发现服务器的证书链不完整,但我完全不知道如何处理此问题。

我记得他们有如下内容:

requests.get(URL, verify='/path/to/certfile')
你可以查一下


找到正确的方式进行证书验证。

我完全忘了提到它,但我想访问的不是我的网站。我只是在写一个原始的废弃程序,用来从网站上删除一些信息。据我所知,首先我必须检索证书并将其保存在文件中,对吗?我试着用
openssl s_client-connect{HOSTNAME}:{PORT}-showcerts
进行测试,但失败的原因是“没有对等证书可用”和“SSL握手读取了0字节,写入了0字节”……嗯,如果你不测试自己的站点,我觉得事情会变得更容易。那么为什么不直接执行requests.get(url,verify=False)?如果你只是想在他们的网站上获取信息,我认为你不需要进行证书验证,除非他们要求你在获取信息之前登录?也许你可以看看这个问题,或者在你的openssl失败时用谷歌搜索。@Albert,如果可能的话,你能告诉我你想从哪个网站获取信息吗?到目前为止,我已经用谷歌搜索了很多东西,但不幸的是没有找到解决方案……也许这与我不太了解openssl和所有相关的东西是如何工作的有关。根据我所读到的,设置
verify=False
是不安全的,我的报废程序会定期报废同一件物品,而不是只报废一次。是的,当然,网站就是这个