You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Twitter API出现SSLError证书验证失败的解决方法

Twitter API 调用SSL证书报错排查方案

问题复现

出于学习目的申请Twitter开发者平台API权限后,使用Tweepy编写内容爬取代码如下:

import tweepy 
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

consumer_key = ""
consumer_secret = ""
access_token = ""
access_token_secret = ""

auth = tweepy.OAuth1UserHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api =tweepy.API(auth)

results = []
keyword = "nft"
tweet = api.search_tweets(keyword)
for i in tweet:
    results.append(i.text)

print(results)

运行时持续抛出SSL相关报错:

requests.exceptions.SSLError: HTTPSConnectionPool(host='free-proxy-list.net', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)')))

尝试过搜索引擎检索到的通用SSL修复方案均无效。

核心根因定位

首先注意两个容易被忽略的关键点:

  1. 代码中写的ssl._create_default_https_context = ssl._create_unverified_context仅对Python原生urllib生效,Tweepy依赖的requests库使用独立的certifi证书库做校验,这行配置完全不生效。
  2. 报错的请求目标域名是free-proxy-list.net,并非Twitter官方API域名api.twitter.com,说明请求根本没有发送到Twitter服务器,问题和Twitter API本身无关。

分步解决流程

  • 第一步:清理异常代理/篡改包
    报错指向免费代理列表站点,首先排查环境中的代理配置:
    1. 在代码最开头加入以下代码打印系统代理变量:
      import os
      print("HTTP_PROXY:", os.environ.get("HTTP_PROXY"))
      print("HTTPS_PROXY:", os.environ.get("HTTPS_PROXY"))
      print("ALL_PROXY:", os.environ.get("ALL_PROXY"))
      
      如果输出非空的代理地址,先执行unset 对应变量名(Linux/macOS)或在系统环境变量设置中删除对应代理项后重试。
    2. 检查系统中运行的代理工具(Clash、V2Ray等)是否开启了全局模式、是否配置了自动拉取免费代理的规则,临时关闭代理或切到规则模式测试。
    3. 排查Python包环境:运行pip list查看是否存在名称可疑的自动注入代理的第三方包,若有直接卸载。最稳妥的方式是新建干净虚拟环境安装官方版Tweepy:
      pip install virtualenv
      virtualenv twitter_venv
      # Windows执行 twitter_venv\Scripts\activate
      # Linux/macOS执行 source twitter_venv/bin/activate
      pip install tweepy
      
  • 第二步:正确配置SSL校验规则
    删掉代码中无效的全局ssl上下文修改代码,先升级requests依赖的证书库到最新版本:
    pip install --upgrade certifi requests
    
    如果本地调试时因为抓包工具(Fiddler、Charles等)需要临时关闭SSL校验,初始化Tweepy客户端时显式传入参数即可,不要做全局修改:
    # *注意:仅本地调试临时使用,生产环境禁止关闭SSL校验,存在中间人攻击风险*
    api = tweepy.API(auth, verify=False)
    
  • 第三步:连通性验证
    完成上述配置后,先调用凭证校验接口测试连通性,不要直接调用搜索接口:
    # 验证成功会返回你的开发者账号用户名
    print(api.verify_credentials().screen_name)
    
    该接口调用成功后,再执行关键词搜索逻辑即可正常运行。

内容的提问来源于stack exchange,提问作者Irene

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 17:57:26