迁移Twitter聊天机器人后Tweepy用户流初始化报错,求配置方案
看起来你在迁移Twitter聊天机器人后遇到了两个核心问题:连接超时和SSL证书验证失败,结合你的服务器环境,我来一步步帮你排查解决:
一、先处理SSL证书验证失败问题
你的服务器用的是OpenSSL 1.0.1f,这个2014年的旧版本已经不支持现代TLS协议和新的证书链,这大概率是SSL3_GET_SERVER_CERTIFICATE:certificate verify failed错误的根源。可以按以下步骤修复:
更新系统CA证书
先更新Ubuntu的根证书包,确保系统能识别Twitter的合法证书:sudo apt-get update sudo apt-get install --reinstall ca-certificates sudo update-ca-certificates升级OpenSSL版本
1.0.1f版本过于老旧,建议升级到更安全的版本。在Ubuntu14.04上可以通过PPA安装更新的OpenSSL:sudo add-apt-repository ppa:openssl/latest sudo apt-get update sudo apt-get install openssl安装完成后用
openssl version确认版本是否更新到1.0.2或更高。给Tweepy手动指定CA证书路径
如果升级后问题仍存在,可以在初始化Stream时手动指定系统的CA证书路径:
先确认系统CA证书文件路径(一般是/etc/ssl/certs/ca-certificates.crt),然后修改代码:twitterStream = Stream(auth, listener(), ca_certs='/etc/ssl/certs/ca-certificates.crt')
二、解决连接超时问题
Max retries exceeded with url: /1.1/user.json... Connection timed out这个错误可能有几个原因,逐一排查:
检查服务器防火墙与网络规则
确认新服务器的防火墙(比如ufw)没有阻止出站的443端口请求:sudo ufw status # 如果443端口未开放,执行: sudo ufw allow out 443/tcp同时用
curl测试是否能连接到Twitter的userstream端点,验证网络连通性:curl -v https://userstream.twitter.com/1.1/user.json如果curl也超时,说明是网络层面的问题,需要联系服务器提供商确认是否有网络限制。
更换Tweepy的Stream初始化方式
注意Tweepy 3.5.0的userstream()方法已经被标记为过时,建议改用filter()方法并指定跟踪自己的用户ID,效果完全一致:# 先通过API.get_user()获取自己的用户ID,替换成实际数值 my_user_id = 123456789 twitterStream = Stream(auth, listener()) twitterStream.filter(follow=[str(my_user_id)])这样可以避免旧方法可能存在的端点兼容问题。
优化重试与超时设置
你的代码已有重试逻辑,但可以优化参数减少频繁请求带来的压力:# 给Stream添加超时设置,避免长时间无响应挂起 twitterStream = Stream(auth, listener(), timeout=60)同时把重试间隔从30秒调整到60秒以上,降低被Twitter限制的风险。
三、升级老旧依赖包
你的pyOpenSSL 0.13和requests 2.11.1版本也偏旧,建议升级到适配新环境的版本:
pip install --upgrade pyopenssl requests==2.27.1
(注:requests 2.27.1是支持Python2.7的最后一个稳定版本)
把这些步骤逐一尝试,应该能解决你的问题。
内容的提问来源于stack exchange,提问作者Anuvrat Kulkarni




