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

Flutter调用OpenWeatherMap报401无效API密钥错误如何解决

OpenWeatherMap 401 Invalid API Key 修复方案

该报错和Geolocator获取经纬度的逻辑无关,核心是接口权限、地址或参数格式问题,按以下步骤排查修复即可:

  • 优先修正接口版本问题
    你当前调用的/data/3.0/onecall是OpenWeatherMap v3版本的OneCall接口,属于付费订阅类接口,新注册的免费账号默认没有该接口的调用权限,哪怕密钥处于激活状态、复制完全正确也会返回401无效密钥错误。
    开发测试阶段直接替换为免费开放的v2.5版本OneCall接口即可,v2.5接口参数和v3.0基本兼容,返回结构差异极小,免费额度足够日常调试使用,修改后的请求代码如下:
const APIKey = '69f9afe03f52ef5c83887fc86dd79d99';

void getData() async {
  // 注意将路径里的3.0改为2.5,同时确认参数连接符是原生&不是HTML转义的&
  http.Response response = await http.get(Uri.parse('https://api.openweathermap.org/data/2.5/onecall?lat=$latitude&lon=$longitude&appid=$APIKey'));
  if (response.statusCode == 200) {
    String data = response.body;
    var decodedData = jsonDecode(data);
    print(decodedData);
  } else {
    print(response.statusCode);
    // 调试阶段可额外打印响应体查看具体错误原因
    print(response.body);
  }
}
  • 必须修正参数转义问题
    你贴出的代码里参数连接符写的是&,这是HTML转义后的和号,在Dart代码里直接写会被当成普通字符串,导致请求参数无法被服务端正确解析,服务端读取不到有效的appid参数也会返回401,要把所有&替换为原生的&符号。
  • 其他排查项
    • 刚生成的API密钥存在最长2小时的服务端同步延迟,如果是刚创建的密钥,等待1-2小时后再测试即可,不需要反复重新生成密钥。
    • 如果你确实需要使用v3.0版本接口,需要到OpenWeatherMap后台手动订阅OneCall 3.0套餐,即使选每月1000次调用的免费档位,也要走完订阅流程,密钥才会开通v3.0接口的调用权限。
    • 如果你给密钥配置了IP白名单、调用频率限制等安全规则,要把测试设备的出口IP加到白名单中,否则也会被拦截返回401。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:12:28