使用Twilio遇SSL错误:AttributeError: 'module'无SSL_ST_INIT属性求解决
解决Twilio Python库中的SSL_ST_INIT AttributeError错误
嘿,我之前也踩过这个坑!这个AttributeError: 'module' object has no attribute 'SSL_ST_INIT'错误,本质上是pyOpenSSL和cryptography库版本不兼容,或者系统底层的OpenSSL库太旧导致的。咱们一步步来搞定它:
先修复依赖版本冲突(最常见的解决办法)
因为你用的是Python2.7(这个版本已经停止维护啦,长远建议升级到Python3),新版本的pyOpenSSL和cryptography已经不再支持Python2,所以得安装兼容的旧版本。先卸载现有冲突的包,再重新安装指定版本:pip uninstall -y pyopenssl cryptography pip install pyopenssl==19.1.0 cryptography==2.8这两个版本是经过验证的,能在Python2.7上稳定运行,同时完美兼容Twilio的Python库。
检查并升级系统级OpenSSL
运行下面的命令看看你系统的OpenSSL版本:openssl version如果版本低于1.0.1,那大概率是底层库太旧导致的绑定问题。在Ubuntu这类Debian系系统上,可以用下面的命令升级:
sudo apt-get update && sudo apt-get install openssl注意:系统级升级可能影响其他依赖,操作前最好做好备份哦。
强制Twilio使用系统CA证书(可选)
有时候是证书信任问题引发的SSL错误,可以修改你的代码,让Twilio的客户端使用系统默认的CA证书:
修改后的代码示例:import random from twilio.rest import Client from twilio.http.http_client import TwilioHttpClient TWILIO_ACCOUNT_SID = "asdfasdfsdfsdf" TWILIO_AUTH_TOKEN = "asdfasdfasdfasf" TWILIO_NUMBER = "+5555555" def send_text(body, target_phone_number): # 配置自定义HttpClient,使用系统证书 http_client = TwilioHttpClient() http_client.session.verify = '/etc/ssl/certs/ca-certificates.crt' # Ubuntu系统路径,其他系统请自行调整 client = Client(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, http_client=http_client) message = client.messages.create(body=body, from_=TWILIO_NUMBER, to=target_phone_number) # 调用示例(记得替换为实际内容) send_text("测试消息", "+123456789")
最后提一句:Python2.7已经停止维护快4年了,很多第三方库都不再更新支持它,长远来看建议你迁移到Python3.x,能避免很多这类奇怪的兼容问题~
内容的提问来源于stack exchange,提问作者codyc4321
相关产品推荐
相关产品推荐

