- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在将我的机器人从旧的、坏掉的笔记本电脑转移到合适的 VPS。我使用的是较旧的异步版本的 Discord.py (0.16.0),因为在重写之前我就开始研究这个东西了;而且我对 Linux 没有太多经验,所以转向 Windows Server 似乎是明智的。我已经安装了所有相同的包(据我所知),但我在启动时一直在 bot.run()
行出现错误:
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:749)
错误发生在握手期间,据我从堆栈跟踪中可以看出,我不知道那意味着什么。
此设置已在两台不同的笔记本电脑(尽管运行的是 Windows 10)上运行了数年,没有任何问题,并且 discord.py 服务器似乎没有在 Windows 机器上遇到过此类问题(它发生在 OS X 上,但由于 Python 3.6 的一些特性,这也发生在 Python 3.5 中。错误的操作系统。)我尝试更改 Python 安装并安装一些自动 Windows 更新,以及运行我在这里和那里找到的一些命令:pip install certifi
和 pip install incremental
。
出于好奇和沮丧,在几个小时的无所事事之后,由于我在一台服务器上有一个我不介意被破坏的测试机器人,我尝试了我在 stackoverflow 讨论中看到的东西
bot = commands.Bot(
command_prefix='/',
connector=aiohttp.TCPConnector(verify_ssl=False)
)
(添加的行特别是整个 connector
kwarg,以前没有。)
奇怪的是,这改变了堆栈跟踪,但实际上并没有改变错误,如下所示:
在添加 verify_ssl = False 之前,我正在……
Traceback (most recent call last):
File "C:\Program Files\Python36\lib\site-packages\aiohttp\connector.py", line 601, in _create_direct_connection
local_addr=self._local_addr)
File "C:\Program Files\Python36\lib\asyncio\base_events.py", line 802, in create_connection
sock, protocol_factory, ssl, server_hostname)
File "C:\Program Files\Python36\lib\asyncio\base_events.py", line 828, in _create_connection_transport
yield from waiter
File "C:\Program Files\Python36\lib\asyncio\sslproto.py", line 503, in data_received
ssldata, appdata = self._sslpipe.feed_ssldata(data)
File "C:\Program Files\Python36\lib\asyncio\sslproto.py", line 201, in feed_ssldata
self._sslobj.do_handshake()
File "C:\Program Files\Python36\lib\ssl.py", line 683, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Program Files\Python36\lib\site-packages\aiohttp\connector.py", line 304, in connect
yield from self._create_connection(req)
File "C:\Program Files\Python36\lib\site-packages\aiohttp\connector.py", line 578, in _create_connection
transport, proto = yield from self._create_direct_connection(req)
File "C:\Program Files\Python36\lib\site-packages\aiohttp\connector.py", line 624, in _create_direct_connection
(req.host, req.port, exc.strerror)) from exc
aiohttp.errors.ClientOSError: [Errno 1] Can not connect to discordapp.com:443 [[SSL: CERTIFICATE_VERIFY_FAILED] certific
ate verify failed (_ssl.c:749)]
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "harubotFE98.py", line 43748, in <module> # trust me, I know
bot.run('SNIP')
File "C:\Program Files\Python36\lib\site-packages\discord\client.py", line 519, in run
self.loop.run_until_complete(self.start(*args, **kwargs))
File "C:\Program Files\Python36\lib\asyncio\base_events.py", line 466, in run_until_complete
return future.result()
File "C:\Program Files\Python36\lib\site-packages\discord\client.py", line 490, in start
yield from self.login(*args, **kwargs)
File "C:\Program Files\Python36\lib\site-packages\discord\client.py", line 416, in login
yield from getattr(self, '_login_' + str(n))(*args, **kwargs)
File "C:\Program Files\Python36\lib\site-packages\discord\client.py", line 346, in _login_1
data = yield from self.http.static_login(token, bot=is_bot)
File "C:\Program Files\Python36\lib\site-packages\discord\http.py", line 195, in static_login
data = yield from self.get(self.ME)
File "C:\Program Files\Python36\lib\site-packages\discord\http.py", line 105, in request
r = yield from self.session.request(method, url, **kwargs)
File "C:\Program Files\Python36\lib\site-packages\aiohttp\client.py", line 555, in __iter__
resp = yield from self._coro
File "C:\Program Files\Python36\lib\site-packages\aiohttp\client.py", line 198, in _request
conn = yield from self._connector.connect(req)
File "C:\Program Files\Python36\lib\site-packages\aiohttp\connector.py", line 314, in connect
.format(key, exc.strerror)) from exc
aiohttp.errors.ClientOSError: [Errno 1] Cannot connect to host discordapp.com:443 ssl:True [Can not connect to discordap
p.com:443 [[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)]]
Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x00000224005401D0>
但之后,它被缩短(?)为...
Traceback (most recent call last):
File "harubotFE98.py", line 43748, in <module>
bot.run('NOPE')
File "C:\Program Files\Python36\lib\site-packages\discord\client.py", line 519, in run
self.loop.run_until_complete(self.start(*args, **kwargs))
File "C:\Program Files\Python36\lib\asyncio\base_events.py", line 466, in run_until_complete
return future.result()
File "C:\Program Files\Python36\lib\site-packages\discord\client.py", line 491, in start
yield from self.connect()
File "C:\Program Files\Python36\lib\site-packages\discord\client.py", line 444, in connect
self.ws = yield from DiscordWebSocket.from_client(self)
File "C:\Program Files\Python36\lib\site-packages\discord\gateway.py", line 175, in from_client
ws = yield from websockets.connect(gateway, loop=client.loop, klass=cls)
File "C:\Program Files\Python36\lib\site-packages\websockets\py35\client.py", line 19, in __await__
return (yield from self.client)
File "C:\Program Files\Python36\lib\site-packages\websockets\client.py", line 150, in connect
factory, wsuri.host, wsuri.port, **kwds)
File "C:\Program Files\Python36\lib\asyncio\base_events.py", line 802, in create_connection
sock, protocol_factory, ssl, server_hostname)
File "C:\Program Files\Python36\lib\asyncio\base_events.py", line 828, in _create_connection_transport
yield from waiter
File "C:\Program Files\Python36\lib\asyncio\sslproto.py", line 503, in data_received
ssldata, appdata = self._sslpipe.feed_ssldata(data)
File "C:\Program Files\Python36\lib\asyncio\sslproto.py", line 201, in feed_ssldata
self._sslobj.do_handshake()
File "C:\Program Files\Python36\lib\ssl.py", line 683, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)
Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x0000021A50E0E358>
我也试过弄乱一个叫做 OpenSSL 的东西,但是我能找到的关于它的几乎所有讨论都足够密集,以至于我无法完全理解它。
编辑:经过一番折腾,我写了一些最简单的脚本来触发错误:
import aiohttp
import asyncio
import ssl
async def main():
async with aiohttp.ClientSession() as cs:
async with cs.get("https://www.discordapp.com") as r:
res = await r.text()
print(res)
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
返回:
Traceback (most recent call last):
File "C:\Program Files\Python36\lib\site-packages\aiohttp\connector.py", line 924, in _wrap_create_connection
await self._loop.create_connection(*args, **kwargs))
File "C:\Program Files\Python36\lib\asyncio\base_events.py", line 802, in create_connection
sock, protocol_factory, ssl, server_hostname)
File "C:\Program Files\Python36\lib\asyncio\base_events.py", line 828, in _create_connection_transport
yield from waiter
File "C:\Program Files\Python36\lib\asyncio\sslproto.py", line 503, in data_received
ssldata, appdata = self._sslpipe.feed_ssldata(data)
File "C:\Program Files\Python36\lib\asyncio\sslproto.py", line 201, in feed_ssldata
self._sslobj.do_handshake()
File "C:\Program Files\Python36\lib\ssl.py", line 683, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "test2.py", line 12, in <module>
loop.run_until_complete(main())
File "C:\Program Files\Python36\lib\asyncio\base_events.py", line 466, in run_until_complete
return future.result()
File "test2.py", line 7, in main
async with cs.get("https://www.discordapp.com") as r:
File "C:\Program Files\Python36\lib\site-packages\aiohttp\client.py", line 1005, in __aenter__
self._resp = await self._coro
File "C:\Program Files\Python36\lib\site-packages\aiohttp\client.py", line 476, in _request
timeout=real_timeout
File "C:\Program Files\Python36\lib\site-packages\aiohttp\connector.py", line 522, in connect
proto = await self._create_connection(req, traces, timeout)
File "C:\Program Files\Python36\lib\site-packages\aiohttp\connector.py", line 854, in _create_connection
req, traces, timeout)
File "C:\Program Files\Python36\lib\site-packages\aiohttp\connector.py", line 992, in _create_direct_connection
raise last_exc
File "C:\Program Files\Python36\lib\site-packages\aiohttp\connector.py", line 974, in _create_direct_connection
req=req, client_error=client_error)
File "C:\Program Files\Python36\lib\site-packages\aiohttp\connector.py", line 929, in _wrap_create_connection
raise ClientConnectorSSLError(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorSSLError: Cannot connect to host www.discordapp.com:443 ssl:None [[SSL: CERTIFI
CATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749)]
我还尝试了一些其他解决方案,例如使用 Web 客户端访问 discordapp.com:443(有效,但未解决此问题)并将 python 的 aiohttp 更新为最新版本(未解决)解决这个问题)。
最佳答案
如果您使用的是 Windows Server 2018/2019(我在个人数据中心服务器上试过),您可以发出以下命令以允许您的机器人连接。我必须从管理终端运行它才能让它工作,但这个命令解决了我所有的问题。
certutil -generateSSTFromWU roots.sst && certutil -addstore -f root roots.sst && del roots.sst
祝你好运!
关于python - 每当我尝试在 VPS 上使用我的 Discord 机器人登录时获取 "SSL: Certificate_verify_failed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57534189/
你知道为什么会调用 badCertificateCallback 吗?证书( Dart 声称无效)与我设置为受信任证书的证书完全相同(相等性检查为真!)。 import 'dart:convert';
我最近将一个项目从 1.22.1 升级到 1.24.3。随后,pub get 失败了 Handshake error in client (OS Error: CERTIFICATE_VERIFY_F
我有一个使用 VirusTotal API 的 python 脚本。它一直没有问题,但是当我运行脚本时突然出现以下错误: urllib2.URLError: 我认为可能是我们的网络代理导致了这个问题
我使用以下代码通过 XMLRPC api 与 Magento 网上商店进行交互。 Magento API Python XMLRPC 一切正常,直到我们将 Web 服务器更改为 SSL 现在我收到以下
在使用 Windows 8.1 的相当新的机器上使用 Python 2.7.12 连接到 www.mydomain.com 时出现错误。错误是 SSL: CERTIFICATE_VERIFY_FAIL
我正在尝试创建一个虚拟环境,过去我可以通过诗歌安装来做到这一点。但是现在当尝试执行 poetry install 时,我收到了这条消息: Max retries exceeded with url:
我使用 python + boto3 在 bitbucket 管道中为 AWS IOT 运行测试脚本 直到最近它工作正常,现在我收到以下错误: Traceback (most recent call
这个问题在这里已经有了答案: youtube-dl gave me an error about ssl (2 个回答) 去年关闭。 我在 Python 中运行了这段代码: from __future
我正在尝试按照 Google 的文档构建我自己的 Android 版本,但它在“repo init”状态下失败(第 2 部分的第 2 步): https://source.android.com/so
好吧,我正在尝试为我的旅馆 wifi 创建一个自动登录脚本,我需要登录到 wifi 才能获得网络访问权限。如果我连接到 wifi,该网页在本地网络上保持打开状态。我只需要访问该网页并在那里登录即可。所
所以我目前正在制作一个 Xamarin.Android 应用程序,一段时间以来它一直使用我制作的 REST API 来与数据来回通信。 不过,我最近将我的 SSL 证书切换到了 LetsEncrypt
在证书有效的某些站点上,在 python 3.5 中使用 urllib3 发出 GET 请求失败并出现错误 CERTIFICATE_VERIFY_FAILED。 import certifi impo
我正在努力解决这个问题 requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
from lxml import html import requests url = "https://website.com/" page = requests.get(url) tree = h
我对我学校网站的请求有疑问。我在网上搜索了解决方案,但没有一个对我有用。我已经通过 pip 安装了 certifi,它不起作用。我已经重新安装了 openssl,但它不起作用。 >>> import
更新 (2019-02-07):issue现已修复,因此如果您仍然遇到此问题,请尝试 gcloud components update。 在过去几个月的某个时候,我的 bq 工具停止工作了。即使是一个
我正在使用 python 2.7.10 request = urllib2.Request(url, data=urllib.urlencode(params)) f = urllib2.urlope
如果这是一个愚蠢的问题,我深表歉意,但我一直在尝试自学如何使用 BeautifulSoup,以便我可以创建一些项目。 我正在关注此链接作为教程:https://www.youtube.com/watc
我本来想解决 [SSL: CERTIFICATE_VERIFY_FAILED] 问题,因为我使用 mac 和 python 3,很多人说我应该运行/Applications/Python\3.6/In
我收到以下错误: Exception in thread Thread-3: Traceback (most recent call last): File "/Library/Frameworks/
我是一名优秀的程序员,十分优秀!