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

如何从SUUNTO API OAuth2获取code与jwt?Python脚本请求失败求助

问题原因排查
  • 参数传递位置错误:你curl里的grant_type/redirect_uri/code都是用-d参数以表单形式放在请求体提交的,属于application/x-www-form-urlencoded类型,但是Python代码里把参数都拼到了URL的查询字符串里,不符合OAuth2令牌接口的参数接收要求,而且还漏传了必填的空值redirect_uri参数。
  • 请求头传参错误:requests.post的第二个位置参数是data(请求体内容),你直接把header字典作为第二个参数传入,会被requests当成请求体发送,请求头根本没有生效,请求头需要用headers=关键字参数显式指定。
  • Basic认证构造错误:你手写的Basic Base64{user:pwd}格式不符合标准,标准格式是Basic 后面直接跟client_id:client_secret的Base64编码结果,不需要加Base64{}的包裹。更稳妥的方式是直接用requests内置的HTTPBasicAuth来生成认证头,避免手动编码出错。
修复后的代码示例
import requests
from requests.auth import HTTPBasicAuth

# 替换为你的实际值
CLIENT_ID = "你的client_id"
CLIENT_SECRET = "你的client_secret"
AUTH_CODE = "步骤4.4返回的授权码"
REDIRECT_URI = "" # 和curl里传的空值保持一致即可

def jwtRequest():
    url = 'https://cloudapi-oauth.suunto.com/oauth/token'
    # 所有表单参数放在data字典里,不要拼到URL
    payload = {
        "grant_type": "authorization_code",
        "client_id": CLIENT_ID,
        "code": AUTH_CODE,
        "redirect_uri": REDIRECT_URI
    }
    # 用内置auth构造Basic认证头,不需要手动写Authorization
    req = requests.post(
        url,
        data=payload,
        auth=HTTPBasicAuth(CLIENT_ID, CLIENT_SECRET)
    )
    # 可按需开启打印排查问题
    # print(req.status_code)
    # print(req.text)
    return req

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:24:02