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

使用MicroPython调用Netatmo API刷新令牌时遇Invalid grant_type错误求助

解决MicroPython urequests刷新Netatmo Access Token的400错误

错误原因分析

你遇到的invalid_request错误核心是请求数据格式不匹配:

  • Netatmo的OAuth2 token接口要求接收application/x-www-form-urlencoded格式的表单数据,但你之前用json.dumps()生成了JSON格式内容,即便设置了正确的Content-Type头,接口仍无法解析JSON格式的参数。
  • 标准Python的requests库会自动将data参数的字典转换为表单格式,但MicroPython的urequests没有这个自动处理逻辑,必须手动生成符合要求的编码字符串。

解决方案

方法1:使用urllib.parse.urlencode(推荐,若环境支持)

如果你的MicroPython环境包含urllib.parse模块,直接用它将字典转换为表单编码字符串:

import urequests
import urllib.parse

# 替换为你的实际参数
payload = {
    'grant_type': 'refresh_token',
    'refresh_token': 'XXXXXXXXXXXXXXXXXXXXXXXXXXX',
    'client_id': 'XXXXXXXXXXXXXXXXXXXXXXXXXXX',
    'client_secret': 'XXXXXXXXXXXXXXXXXXXXXXXXXXX',
}

# 将字典转为x-www-form-urlencoded格式字符串
encoded_data = urllib.parse.urlencode(payload)
# 转换为字节流
data_bytes = encoded_data.encode('utf-8')

headers = {'Content-Type': 'application/x-www-form-urlencoded'}

response = urequests.post('https://api.netatmo.com/oauth2/token', data=data_bytes, headers=headers)
print(response.text)

方法2:手动拼接表单字符串(无依赖版本)

若环境没有urllib.parse,可以手动拼接参数:

import urequests

# 替换为你的实际参数
payload = {
    'grant_type': 'refresh_token',
    'refresh_token': 'XXXXXXXXXXXXXXXXXXXXXXXXXXX',
    'client_id': 'XXXXXXXXXXXXXXXXXXXXXXXXXXX',
    'client_secret': 'XXXXXXXXXXXXXXXXXXXXXXXXXXX',
}

# 手动生成表单格式字符串
form_parts = []
for key, value in payload.items():
    form_parts.append(f"{key}={value}")
encoded_data = '&'.join(form_parts)
data_bytes = encoded_data.encode('utf-8')

headers = {'Content-Type': 'application/x-www-form-urlencoded'}

response = urequests.post('https://api.netatmo.com/oauth2/token', data=data_bytes, headers=headers)
print(response.text)

额外注意事项

  • 不要用GET方法拼接参数到URL:Netatmo的token接口明确要求使用POST方法提交参数,GET请求可能会被拒绝。
  • 若参数值包含特殊字符,方法1的urlencode会自动处理编码,方法2需要手动对特殊字符进行URL编码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 11:12:46