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

使用Tweepy 3-legged OAuth验证时遭遇401错误求助

解决Twitter 3-legged OAuth Invalid oauth_verifier的问题及替代方案

问题排查步骤

1. 确保OAuth会话的一致性

Invalid oauth_verifier最常见的触发原因是生成授权URL的oauth1_user_handler实例和调用get_access_token的不是同一个。

get_authorization_url()会生成一对临时的request token & secret,这些数据存储在handler实例内部。如果你第一次运行代码打印URL后,重启程序或重新初始化了handler,再传入verifier就会因为临时token不匹配而报错。

解决办法:把获取授权URL、接收verifier、获取access token的流程放在同一个代码会话里,全程复用同一个handler实例,不要中途重新创建。

2. 验证oauth_verifier的准确性

检查你复制的verifier是否完全和回调URL中的参数一致:

  • 不要带多余的空格、换行符
  • 确认没有遗漏或多写字符(直接复制URL中oauth_verifier=后面的完整内容即可)

3. 检查开发者平台配置

  • 确认应用设置里的Callback URL和代码里的callback_url完全一致,包括协议(http/https)、末尾的斜杠(比如代码里是http://127.0.0.1/,平台里也要一模一样)
  • 确认应用权限包含Write权限(发推文必须用到该权限,虽然不是verifier无效的直接原因,但后续发推会报错)
  • 检查应用状态是否正常,没有被限制或暂停

修正后的示例代码

import tweepy

# 替换为你的应用凭证
consumer_key = 'XMNB5a0cuHOrko2ETCqs8iT4p'
consumer_secret = 'm46XTiR9JkYXWEoHWZwyemQJ5V5JW448KzovQWnpWNglTVUmjz'
callback_url = 'http://127.0.0.1/'

# 只初始化一次handler,全程复用
oauth_handler = tweepy.OAuth1UserHandler(
    consumer_key, consumer_secret,
    callback=callback_url
)

# 获取授权URL
auth_url = oauth_handler.get_authorization_url()
print(f"授权链接:{auth_url}")

# 手动输入回调URL中的oauth_verifier
verifier = input("请输入回调URL里的oauth_verifier值:")

try:
    # 获取持久化的access token
    access_token, access_token_secret = oauth_handler.get_access_token(verifier)
    print(f"Access Token: {access_token}")
    print(f"Access Token Secret: {access_token_secret}")

    # 测试发推文
    api = tweepy.API(oauth_handler)
    api.update_status("跨账号OAuth授权测试推文")
    print("推文发布成功")
except tweepy.errors.TweepyException as e:
    print(f"错误详情:{e}")

跨账号发推文的替代方案

方案1:使用OAuth 2.0 Authorization Code Flow with PKCE

Twitter API v2支持更简洁安全的OAuth2.0授权流程,Tweepy也提供了对应实现,相比OAuth1.0无需存储复杂的token secret:

import tweepy

client_id = "你的Client ID"
callback_url = "http://127.0.0.1/"

oauth2_user_handler = tweepy.OAuth2UserHandler(
    client_id,
    callback=callback_url,
    scope=["tweet.read", "tweet.write", "users.read"]
)

auth_url = oauth2_user_handler.get_authorization_url()
print(f"授权链接:{auth_url}")

# 输入回调URL中的code参数
code = input("请输入回调URL里的code值:")

access_token = oauth2_user_handler.get_access_token(code)

# 创建API实例发推
client = tweepy.Client(access_token)
response = client.create_tweet(text="OAuth2.0跨账号测试推文")
print(f"推文ID:{response.data['id']}")

方案2:测试用户授权(适合内部管理账号)

如果目标账号是你可控的,可以在Twitter开发者平台将其添加为应用的测试用户,通过OAuth1.0流程授权一次后保存该账号的access token和secret,后续直接用这些凭证发推,无需每次走授权流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:20:56