Как сделать запрос к 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 шт):

Автор решения: Semen

Во первых, убираем ?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 (см. во первых) введите сюда описание изображения

→ Ссылка