python - 是否可以连接到 https URL?
问题描述
我有一个使用 http 运行良好的简单代码(不安全),但随后我将其更新为 https 出现错误ssl.SSLCertVerificationError
我正在使用具有有效 ssl 的 heroku 服务器,当然,mac 上的 python 3.7.3,ssl.OPENSSL_VERSION
= 1.1.0,certifi
=2019.3.9,Flask
=1.0.2,Flask-SocketIO
=3.3.2
这是代码:
import socketio
sio = socketio.Client()
@sio.on('connect')
def on_connect():
print('Connected ...')
@sio.on('message')
def on_message(data):
print('I received a message!')
print(data)
if __name__ == '__main__':
sio.connect('https://heroku.server.url')
这就是我使用 https 得到的:
Traceback (most recent call last):
File "/Users/calavraian/Devel/Projects/FlaskTesting/Client.py", line 21, in <module>
sio.connect('https://heroku.server.url')
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/socketio/client.py", line 208, in connect
engineio_path=socketio_path)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/engineio/client.py", line 166, in connect
url, headers, engineio_path)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/engineio/client.py", line 303, in _connect_polling
if self._connect_websocket(url, headers, engineio_path):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/engineio/client.py", line 341, in _connect_websocket
cookie=cookies)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/websocket/_core.py", line 514, in create_connection
websock.connect(url, **options)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/websocket/_core.py", line 223, in connect
options.pop('socket', None))
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/websocket/_http.py", line 126, in connect
sock = _ssl_socket(sock, options.sslopt, hostname)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/websocket/_http.py", line 260, in _ssl_socket
sock = _wrap_sni_socket(sock, sslopt, hostname, check_hostname)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/websocket/_http.py", line 239, in _wrap_sni_socket
server_hostname=hostname,
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 412, in wrap_socket
session=session
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 853, in _create
self.do_handshake()
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 1117, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)
有任何想法吗 ?
解决方案
最后我让它工作了,我在另一台具有相同软件条件的 Mac 计算机上尝试了相同的代码,它工作正常,也在 aPC with Ubuntu
和 a上Raspberry Pi with Raspbian
,一切正常,所以再次回到有问题的第一台 Mac 上,我开始调试再次,重新安装和更新软件包,pip
但什么也没发生。
我尝试过的其他解决方案是重新安装certifi
软件包,pip
但没有得到任何修复。
最后,解决问题的方法是运行 Python 附带的位于 中的脚本/Applications/Python 3.X/Install Certificates.command
,您可以直接Finder
在其上双击运行它,也可以在终端上转到该文件夹并执行它。
完成此操作后,我进行了测试python-socketio 3.1.2
,python-socketio 4.0.1
一切正常。
最后的建议,如果您在尝试运行脚本后仍然遇到相同的错误,您可以尝试一个替代python-socketio
方法socketIO-client-2
初始条件(在运行脚本之前)。运行上面的脚本后,现在都运行完美了。
推荐阅读
- swift - 设置 Swift 可执行命令行工具的版本号
- angular - 找不到“字符串”类型的不同支持对象。NgFor 仅支持绑定到 Iterables,例如 Arrays
- apache-kafka - 当 kafkatopic 保留期到期时更新 MaterializedView
- c# - 为图像打包 uri 设计时和运行时 Visual Studio 2019
- visual-studio-code - Choropleth 图未在 VS Code 上显示
- amazon-web-services - 在使用 Istio 服务网格时我们真的需要 AWS 网关吗
- java - Android Studio 适配器不工作 RecyclerView 什么也不显示
- ios - 有没有办法在 iOS 15 beta 上安装 Xcode 12.x 构建的应用程序?
- julia - 在 Julia 中使用 Monte-Carlo 方法计算 n 球的体积
- python - 如何存储 QLineEdit 字符串并能够使用 QPushButton 将存储的字符串添加到 QLineEdit?