Я могу выполнить описанную ниже операцию 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 с использованием выборки, я получаю следующую ошибку.
{
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
, он вернул ответ с координатами.
Можно ли вообще сделать запрос к этому API с помощью выборки? Я открыт для других альтернатив, я просто не могу сделать так, чтобы это был запрос из командной строки.