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

为何调用Pocket API始终返回401状态码?附调试代码

解决Pocket API调用时的401 Unauthorized问题

嘿,我来帮你排查下调用Pocket API时一直收到401状态码的问题,结合你的代码来看,主要是这几个环节容易出错:

1. 请求令牌的获取与使用不匹配

你代码里直接用了硬编码的code: '21ff0ee0-2b65-fe35-f4b3-a18ed3',但这个值应该是从第一步获取请求令牌的响应里动态提取的,而不是手动写死。Pocket返回的请求令牌是一次性的,硬编码的旧令牌肯定会导致授权失败。

2. 重定向URI的格式与配置不匹配

你设置的redirect_uri里用了&,这是HTML转义后的符号,实际请求中应该使用原始的&。同时,这个URI必须和你在Pocket开发者后台配置的Redirect URI完全一致,包括所有参数和符号,哪怕一个字符不同都会触发401。

3. 跳过了用户授权的关键步骤

Pocket的OAuth流程需要三个步骤:获取请求令牌 → 引导用户登录Pocket并授权你的应用 → 用请求令牌交换访问令牌。你直接跳过了中间用户授权的步骤,调用authorize接口自然会被拒绝。

修正后的代码示例

import requests
from urllib.parse import parse_qs

# 第一步:获取请求令牌
auth_params = {
    'consumer_key': '77081-4664470ecdeaa9c127925c30',
    'redirect_uri': 'https://weibo.com/u/5069317986/home?topnav=1&wvr=6'  # 替换为后台配置的原始URI,用&而非&
}
tkn_response = requests.post('https://getpocket.com/v3/oauth/request', data=auth_params)
tkn_data = parse_qs(tkn_response.content.decode('utf-8'))
request_token = tkn_data['code'][0]
print(f"获取到请求令牌:{request_token}")

# 第二步:引导用户完成授权(必须手动操作)
auth_url = f"https://getpocket.com/auth/authorize?request_token={request_token}&redirect_uri={auth_params['redirect_uri']}"
print(f"请复制以下链接到浏览器,登录Pocket并授权你的应用:\n{auth_url}")

# 第三步:用户授权后,交换访问令牌
usr_params = {
    'consumer_key': '77081-4664470ecdeaa9c127925c30',
    'code': request_token  # 使用动态获取的请求令牌
}
usr_response = requests.post('https://getpocket.com/v3/oauth/authorize', data=usr_params)
usr_data = parse_qs(usr_response.content.decode('utf-8'))
print("授权响应结果:", usr_data)

额外注意事项

  • 检查Pocket开发者后台的Consumer Key是否和代码里的一致,不要出现字符遗漏或拼写错误。
  • 如果授权后还是401,尝试重新生成请求令牌,因为请求令牌是短期有效的,过期后无法使用。
  • 确保你的网络环境可以正常访问Pocket的API服务器,部分地区可能需要调整网络设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:17:05