使用fetch调用Google TimeZone API时GET带body触发错误该如何处理?
Google是否允许GET请求携带body调用TimeZone API?
不允许。
你遇到的报错是浏览器本地抛出的,还没有发送到Google的服务器:fetch实现严格遵循HTTP规范,明确禁止GET/HEAD类型的请求携带body参数,所以请求在发起阶段就被拦截了。
即使你绕过浏览器限制使用其他HTTP客户端发送带body的GET请求,Google TimeZone API也不会读取请求body内的参数,该接口的官方规则要求所有请求参数必须通过URL查询字符串传递。
正确处理方案
将所有参数拼接为URL查询字符串后发起GET请求即可,推荐使用URLSearchParams处理参数,避免手动拼接出现的编码错误,参考实现代码如下:
const params = new URLSearchParams({ location: `${this.latitude.value},${this.longitude.value}`, timestamp: Math.floor(Date.now() / 1000).toString(), key: '你的Google API密钥' }) const requestUrl = `https://maps.googleapis.com/maps/api/timezone/json?${params.toString()}` const timeZoneResult = await fetch(requestUrl); const timeZone = await timeZoneResult.json();
内容的提问来源于stack exchange,提问作者chuckd
相关产品推荐
相关产品推荐

