Flutter使用http包调用OpenWeatherMap API返回HTML而非JSON如何解决
问题解决方案
你遇到的返回HTML而非JSON的问题由以下原因导致,按对应步骤调整即可:
核心问题:URL缺少HTTPS协议前缀
你当前定义的url没有添加https://前缀,Uri.parse解析无协议头的地址时会触发服务器返回重定向/错误提示的HTML页面,OpenWeatherMap所有公开接口都要求必须使用HTTPS协议访问。
可选优化:添加请求头明确指定返回格式
为避免服务器默认返回非JSON格式,可在请求中添加Accept头,明确要求返回application/json类型数据。
修正后代码
void getData() async { // 补充https协议前缀 final url = 'https://samples.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=b6907d289e10d714a6e88b30761fae22'; http.Response response = await http.get( Uri.parse(url), headers: {'Accept': 'application/json'}, ); // 可打印状态码辅助后续排查 print('响应状态码: ${response.statusCode}'); print(response.body); }
额外排查项
如果调整后仍无法拿到正确JSON,可根据打印的状态码对应排查:
- 状态码为
401:你使用的appid无效,需确认OpenWeatherMap后台的密钥是否已激活、拼写是否正确 - 状态码为
404:接口路径填写错误,需对照官方文档确认接口版本、路径是否正确 - 状态码为
429:触发了免费版接口的调用频率限制,稍等片刻再重试即可
内容的提问来源于stack exchange,提问作者vandit vasa
相关产品推荐
相关产品推荐

