我能够执行Google Geolocation API文档提供的以下cURL
操作。
example.json
{
"considerIp": "false",
"wifiAccessPoints": [
{
"macAddress": "00:25:9c:cf:1c:ac",
"signalStrength": -43,
"signalToNoiseRatio": 0
},
{
"macAddress": "00:25:9c:cf:1c:ad",
"signalStrength": -55,
"signalToNoiseRatio": 0
}
]
}
然后我在终端中运行下面的程序,获取GPS坐标。
$ curl -d @your_filename.json -H "Content-Type: application/json" -i "https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY"
然而,当我尝试使用fetch将其作为POST请求执行时,我会得到以下错误。
{
error: {
code: 400,
message: 'Invalid JSON payload received. Unexpected token.n[object Object]n ^',
errors: [ [Object] ],
status: 'INVALID_ARGUMENT'
}
}
我尝试过以不同的方式重写我的选项和请求体,但没有找到解决方案。我看到了这个答案,但它并没有真正提供有关获取请求的信息。这个问题指的是蜂窝塔,而我正在使用wifiAccessPoints,但我认为请求的结构会类似。下面是我的请求体,与example.json.相同
const body = {
"considerIp": "false",
"wifiAccessPoints": [
{
"macAddress": "00:25:9c:cf:1c:ac",
"signalStrength": -43,
"signalToNoiseRatio": 0
},
{
"macAddress": "00:25:9c:cf:1c:ad",
"signalStrength": -55,
"signalToNoiseRatio": 0
}
]
}
这是我的POST获取请求。
var url = "https://www.googleapis.com/geolocation/v1/geolocate?key=" + apiKey
fetch(url, {method: 'POST', headers: {
'Content-Type': 'application/json'
// 'Content-Type': 'application/x-www-form-urlencoded',
}, body: body})
.then(res=>res.json())
.then((json,err)=>{
if (err){
console.log(err)
} else {
console.log(json)
}
})
我的API密钥有效且不受限制(我也将其用于API的位置(,当我在cURL
操作中尝试密钥时,它返回了坐标响应。
是否可以使用fetch向这个API发出请求?我对其他选择持开放态度,我只是不能让它成为命令行请求。
您需要使用JSON.stringify(body)
将body的值序列化为JSON字符串。下面是示例代码和示例fiddle(注意:将字符串YOUR_API_KEY替换为您自己的API键(。
const body = {
"considerIp": "false",
"wifiAccessPoints": [
{
"macAddress": "00:25:9c:cf:1c:ac",
"signalStrength": -43,
"signalToNoiseRatio": 0
},
{
"macAddress": "00:25:9c:cf:1c:ad",
"signalStrength": -55,
"signalToNoiseRatio": 0
}
]
}
fetch("https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY", {
method: "post",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
//make sure to serialize your JSON body
body: JSON.stringify(body)
})
.then(res=>res.json())
.then((json,err)=>{
if (err){
console.log(err)
} else {
console.log(json)
}});
希望这能有所帮助!