Как сделать запрос к API Яндекс.Расписаний на JavaScript?
Как сделать запрос к API Яндекс.Расписаний на JavaScript, в документации api есть пример, который хорошо работает при обращении через браузер URL: http://api.rasp.yandex.net/v3.0/schedule/?apikey={мой ключ }&station=s9600213&transport_types=plane&direction=all&date=2023-12-18&event=arrival
Как сделать тоже самое только на JavaScript, заголовки передал, возникает ошибка: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled. Пример кода:
<script>
const requestURL =
"https://api.rasp.yandex.net/v3.0/copyright/?apikey={мой ключ}&format=json";
function sendRequest(method, url) {
const headers = {
"Content-Type": "application/json",
"Authorization": "мой ключ из ЛК API",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "Content-Type",
"Access-Control-Allow-Methods": "GET,POST,OPTIONS,DELETE,PUT",
};
return fetch(url, {
method: method,
headers: headers,
}).then((response) => {
if (response.ok) {
return response.json();
}
return response.json().then((error) => {
const e = new Error("Что-то пошло не так", e);
e.data = error;
throw e;
});
});
}
sendRequest("GET", requestURL)
.then((data) => console.log(data))
.catch((err) => console.log(err));
</script>
Ответы (1 шт):
Во первых, убираем ?apikey={мой ключ} т.к в документации к апи указано Параметр можно не передавать, если ключ доступа указан в заголовке Authorization
Исправленный код:
let requestURL = "https://api.rasp.yandex.net/v3.0/copyright/?format=json"
async function sendRequest(method, url) {
const headers = {
"Content-Type": "application/json",
"Authorization": "<token>", // избавляемся от лишних заголовков
};
return fetch(url, {
method: method,
headers: headers,
}).then((response) => {
if (response.ok) {
return response.json();
}
return response.json().then((error) => {
const e = new Error("Что-то пошло не так", e);
e.data = error;
throw e;
});
});
}
sendRequest("GET", requestURL)
.then((data) => console.log(data))
.catch((err) => console.log(err));
Выводит: (проверил почти со всеми методами), если менять условия в requestURL и при этом не вводить apikey (см. во первых)
