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

如何解决Tweepy代码中的403 Forbidden错误?

修复Tweepy发布推文时的403 Forbidden错误

我用以下Tweepy代码尝试发布推文时遇到了403 Forbidden错误,查资料、看视频后仍未解决,该如何修复?

import tweepy, codecs

consumer_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
consumer_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
access_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
access_token_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
Bearer_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

api = tweepy.API(auth)

api.update_status("Hello from Python for Udemy Data Science and Machine Learning Course")

错误信息如下:

Forbidden                                 Traceback (most recent call last)
Cell In[8], line 1
----> 1 api.update_status("Hello from Python for Udemy Data Science and Machine Learning Course")

File ~\anaconda3\lib\site-packages\tweepy\api.py:46, in payload.<locals>.decorator.<locals>.wrapper(*args, **kwargs)
     44 kwargs['payload_list'] = payload_list
     45 kwargs['payload_type'] = payload_type
---> 46 return method(*args, **kwargs)

File ~\anaconda3\lib\site-packages\tweepy\api.py:979, in API.update_status(self, status, **kwargs)
    976 if 'media_ids' in kwargs:
    977     kwargs['media_ids'] = list_to_csv(kwargs['media_ids'])
---> 979 return self.request(
    980     'POST', 'statuses/update', endpoint_parameters=(
    981         'status', 'in_reply_to_status_id',
    982         'auto_populate_reply_metadata', 'exclude_reply_user_ids',
    983         'attachment_url', 'media_ids', 'possibly_sensitive', 'lat',
    984         'long', 'place_id', 'display_coordinates', 'trim_user',
    985         'card_uri'
    986     ), status=status, **kwargs
    987 )

File ~\anaconda3\lib\site-packages\tweepy\api.py:271, in API.request(self, method, endpoint, endpoint_parameters, params, headers, json_payload, parser, payload_list, payload_type, post_data, files, require_auth, return_cursors, upload_api, use_cache, **kwargs)
    269     raise Unauthorized(resp)
    270 if resp.status_code == 403:
---> 271     raise Forbidden(resp)
    272 if resp.status_code == 404:
    273     raise NotFound(resp)

Forbidden: 403 Forbidden
453 - 你当前仅能访问Twitter API v2的部分端点和有限的v1.1端点(如媒体上传、oauth)。若需访问此端点,可能需要不同的权限等级。

修复方案

  1. 切换到Twitter API v2接口
    错误提示明确指出v1.1的statuses/update端点权限不足,现在推荐使用v2 API发布推文。用Tweepy的Client类替代API类,示例代码:

    import tweepy
    
    bearer_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    consumer_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    consumer_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    access_token = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    access_token_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    
    # 初始化v2客户端
    client = tweepy.Client(
        bearer_token=bearer_token,
        consumer_key=consumer_key,
        consumer_secret=consumer_secret,
        access_token=access_token,
        access_token_secret=access_token_secret
    )
    
    # 发布推文
    response = client.create_tweet(text="Hello from Python for Udemy Data Science and Machine Learning Course")
    print(f"推文发布成功,ID: {response.data['id']}")
    
  2. 确认API权限配置
    登录Twitter开发者后台,检查你的项目是否拥有v2的Write权限。如果坚持使用v1.1 API,需要确保账号已申请并获得Read and Write权限(新账号默认可能仅开放读权限)。

  3. 验证Token权限
    确认你的access token和access token_secret具备写权限,部分生成的token可能仅拥有读权限,需要重新生成具备读写权限的token。

内容的提问来源于stack exchange,提问作者Fatih Mehmet Koç

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:35:59