Я могу выполнить приведенную ниже операцию cURL
, предоставленную документами Google Geolocation API.
пример. 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"
Однако, когда я пытаюсь выполнить это как запрос POST с использованием fetch, я получаю следующую ошибку:
{
error: {
code: 400,
message: 'Invalid JSON payload received. Unexpected token.\n[object Object]\n ^',
errors: [ [Object] ],
status: 'INVALID_ARGUMENT'
}
}
Я попытался переписать свои варианты и запросить тело различными способами и не нашел решения. Я видел этот ответ, но на самом деле он не предоставляет информацию относительно запроса на получение. Этот вопрос относится к вышкам сотовой связи, тогда как я работаю с wifiAccessPoints, но я подумал, что структура запроса будет аналогичной. Ниже приведено мое тело запроса, оно аналогично примеру. 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
, он вернул ответ с координатами.
Можно ли даже сделать запрос к этому API с помощью fetch? Я открыт для других альтернатив, но просто не могу, чтобы это был запрос командной строки.