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

使用Monkey C开发Garmin应用时HTTP请求持续返回-400错误求助

解决Monkey C中HTTP请求返回-400错误的问题
  • 错误原因1:GET请求的Content-Type设置冗余且不合理
    GET请求通常不会携带请求体,你设置的Content-Type是针对POST请求的表单数据,对于GET请求来说完全多余,甚至会被服务器判定为无效请求,直接返回400。

  • 错误原因2:响应类型与目标资源不匹配
    你请求的是https://www.garmin.com的HTML页面,但设置了responseType为URL_ENCODED,这和实际返回的内容类型不符,会导致请求处理异常。

  • 错误原因3:目标域名的反拦截机制
    Garmin官网可能会对来自设备的请求进行UA检测,默认的设备UA可能被拦截,需要手动添加合理的User-Agent头。

修改后的示例代码

import Toybox.System;
import Toybox.Communications;
import Toybox.Lang;

class JsonTransaction {
    function onReceive(responseCode as Number, data as Dictionary?) as Void {
        if (responseCode == 200) {
            System.println("Request Successful");
        } else {
            System.println("Response: " + responseCode);
        }
    }

    function makeRequest() as Void {
        var url = "https://www.garmin.com";

        // GET请求无需额外参数,留空即可(若需参数直接拼在URL后)
        var params = {};

        var options = {
            :method => Communications.HTTP_REQUEST_METHOD_GET,
            :headers => {
                // 添加模拟浏览器的User-Agent,避免被拦截
                "User-Agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
            },
            // 响应类型改为RAW,匹配HTML页面的返回格式
            :responseType => Communications.HTTP_RESPONSE_CONTENT_TYPE_RAW
        };

        Communications.makeWebRequest(url, params, options, method(:onReceive));
    }
}

额外注意事项

  • 确保你的应用已在Garmin开发者后台配置了允许的域名,若未将https://www.garmin.com加入权限列表,也可能导致请求被拦截(部分场景下会返回400)。
  • 测试时可先请求简单的公开API(如https://jsonplaceholder.typicode.com/todos/1),验证请求逻辑是否正常,排除目标网站的特殊限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:50:24