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

Python调用Twitter API流式接口报HTTP 403错误如何解决

问题描述
  • 运行环境:Python
  • 前置条件:已获取Twitter API Elevated访问权限,完成开发者门户应用配置,走完OAuth 1.0认证流程
  • 故障现象:调用流式接口固定返回错误 Stream encountered HTTP error: 403,无法定位问题原因
  • 复现代码:
import tweepy 

api_key = "" 
api_key_secret = ""
access_token = ""
access_token_secret = ""

stream = tweepy.Stream(api_key,api_key_secret, access_token, access_token_secret)
stream.filter(track=["President"])
故障原因

你使用的tweepy.Stream类对接的是Twitter API v1.1版本的statuses/filter流式端点,返回403基本是以下三类问题导致:

  1. 应用未关联到持有Elevated权限的项目,独立创建的standalone应用默认只有基础权限,无v1.1接口访问资格
  2. 应用权限配置不匹配,或修改权限后未重新生成access token,旧token会自动失效
  3. 2023年之后新申请的Elevated权限对v1.1旧端点的访问限制收紧,部分账号即便有Elevated权限也无法调用旧版v1.1流接口
修复方案

按优先级从高到低排查操作:

  • 优先切换到API v2版本流式接口
    v1.1旧端点已进入逐步下线流程,新权限适配差,直接用tweepy对应v2接口的StreamingClient实现即可,只需要Bearer Token就能调用,不需要配置OAuth1.0的四个密钥,参考代码:
import tweepy

# 替换为你自己应用的Bearer Token,在开发者门户应用的Keys and Tokens页面生成
bearer_token = ""

class CustomStream(tweepy.StreamingClient):
    def on_tweet(self, tweet):
        # 这里写自定义的推文处理逻辑
        print(tweet.text)

if __name__ == "__main__":
    stream = CustomStream(bearer_token)
    # 清除已有规则避免重复匹配
    existing_rules = stream.get_rules().data
    if existing_rules:
        stream.delete_rules([rule.id for rule in existing_rules])
    # 添加过滤规则
    stream.add_rules(tweepy.StreamRule("President"))
    # 启动流
    stream.filter()
  • 如果必须使用v1.1版本接口,按以下步骤校验配置:
    1. 打开开发者门户,确认当前使用的应用挂载在已开通Elevated权限的Project下,未关联项目的独立应用没有v1.1接口访问权限
    2. 进入应用的用户认证设置页,确认应用权限至少开启「Read」读权限;如果之前修改过权限等级,必须到Keys and Tokens页面重新生成access_token和access_token_secret,旧token在权限变更后会直接失效
    3. 给Stream类加错误调试逻辑,打印完整错误响应定位具体问题,参考代码:
import tweepy

api_key = "" 
api_key_secret = ""
access_token = ""
access_token_secret = ""

class DebugStream(tweepy.Stream):
    def on_error(self, status_code):
        print(f"请求错误码:{status_code}")
        print(f"完整响应内容:{self.response.text}")
        # 返回False会直接终止流,方便排查
        return False

stream = DebugStream(api_key,api_key_secret, access_token, access_token_secret)
stream.filter(track=["President"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:21:51