#javascript #api
Вопрос:
Всякий раз, когда я пытаюсь вызвать API openweathermap, это появляется:
Доступ для получения по адресу ‘https://openweathermap.org/data/2.5/weather?lat=23.887871999999998amp;lon=90.25945600000001amp;appid=9b7d97d1f8bec5e916a02f35a15d7272″ от источника «null» заблокирован политикой CORS: на запрошенном ресурсе отсутствует заголовок «Управление доступом-Разрешить-источник». Если непрозрачный ответ удовлетворяет вашим потребностям, установите режим запроса на «без cors», чтобы получить ресурс с отключенным CORS
Я совершенно новичок в API, и я также использовал демо-версию CORS anywhere, но это больше не работает с января 2021 года. Поэтому, какие другие альтернативы я могу использовать для решения этой проблемы. Я просто хочу протестировать свое приложение о погоде. Но эта политика CORS и все остальное мне совершенно чужды.
Это и есть код:
window.addEventListener('load', function() {
let apiKey = "<api-key>";
let lat;
let long;
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition((position) => {
lat = position.coords.latitude;
long = position.coords.longitude;
const proxy = 'https://cors-anywhere.herokuapp.com/corsdemo';
const api = `${proxy}https://openweathermap.org/data/2.5/weather?lat=${lat}amp;lon=${long}amp;appid=${apiKey}`
//console.log(api);
fetch(api)
.then((response) => {
return response.json();
})
.then((data) => {
console.log(data);
});
});
} else {
alert('This app requires your GPS location turn on');
}
});
Комментарии:
1. Вы пробовали
no-cors
установить этот параметрfetch(api, {mode: 'no-cors'})
2. Теперь, когда вы упомянули об этом, я протестировал его, но, похоже, у меня возникла еще одна проблема с этим сообщением: {код: 401, сообщение: «Неверный ключ API. Пожалуйста, посмотрите openweathermap.org/faq#error401 для получения дополнительной информации.»}.
3. Это говорит о том, что это сработало, и запрос проходит. Теперь вам нужно исправить аутентификацию.
4. Как мне это сделать? Я имею в виду, что я дважды проверял ключ API, который я получил от openweathermap, но по-прежнему безрезультатно.
5. Это был бы другой вопрос!
Ответ №1:
Chrome не позволяет получать доступ к API, которые размещены на разных серверах. Это в основном Перекрестное происхождение. Эта ошибка в основном возникает, когда вы запускаете приложение на локальном хосте и пытаетесь подключиться к какому-либо размещенному API. Существует ряд доступных расширений Chrome, которые позволяют подключать размещенный API из локального.
Комментарии:
1. Что это за расширения? Не могли бы вы мне что-нибудь предложить?
2.Попробуйте эти — chrome.google.com/webstore/detail/allow-cors-access-control/… chrome.google.com/webstore/detail/cors-unblock/…
3. Я думаю, что расширение chrome несколько решает мою проблему, но не полностью. Потому что теперь я получаю это сообщение: {код: 401, сообщение: «Неверный ключ API. Пожалуйста, посмотрите openweathermap.org/faq#error401 для получения дополнительной информации.»}. Из того, что я понимаю, это связано с API погоды, который я использую.
4. Не используйте расширение для этого, если вы не собираетесь поручать его использование любому, кто собирается использовать сайт. Лучше все исправить как следует.
5. Если вы получаете неверный API ключа, это означает, что передаваемый вами ключ неверен. Я вижу в вашем коде, что вы используете «<api-ключ>» в качестве ключа. Вместо этого вам нужно использовать какой-то фактический ключ, который будет предоставлен владельцем API, в вашем случае это будет OpenWeathermap.org