Доступ к API работает нормально с cURL, но не с Fetch API - PullRequest
0 голосов
/ 27 ноября 2018

Я знаю, что на SO мы обращались лот раз, но все ответы в основном в духе "добавить определенный заголовок на сервер".В этом случае API (Shopify) отлично работает и легко доступен через curl.

Я пробовал это как с библиотекой Axios, так и с Fetch API.

  • Я пробовал каждое значение для referrer, mode и referrerPolicy в параметрах выборки.
  • Я подтвердил, что мои учетные данные BasicAuth верны.
  • Я пробовал в нескольких браузерах.
  • Я пробовал как с localhost, localhost.com (установите значение в моем / etc / hosts), так и с сервера с реальным доменным именем.

Я не могу понять, почему это прекрасно работает в cURL, но не в fetch ().

Вот сокращенная версия моего кода:

const apiKey = 'mykey';
const apiPassword = 'mypass';
const apibase = 'https://my-shop-domain.myshopify.com/admin/';
const endpoint = 'locations.json';

var headers = new Headers({
   "Authorization": "Basic " + btoa( apiKey + ':' + apiPassword ),
});

    fetch( apibase + endpoint {
      method: 'GET',
      headers: headers,
      mode: 'no-cors',
      // cache: "no-store",
      // referrer: "client",
      // referrerPolicy: "origin",
      // credentials: 'include'
    }).then( resp => resp.json().then( resp => {

      console.log( resp );

    })).catch( err => {

      console.error(err);

    });

и возвращается ошибка

Доступ к выборке в 'https://my -shop-domain.myshopify.com/admin/locations.json 'from origin' https://localhost:8080' заблокирован политикой CORS: Ответ на предполётный запрос не проходит проверку контроля доступа: Нет 'Access-ControlЗаголовок -Allow-Origin 'присутствует на запрашиваемом ресурсе.Если непрозрачный ответ отвечает вашим потребностям, установите режим запроса «no-cors», чтобы получить ресурс с отключенным CORS.

Если Shopify не включает Access-Control-Allow-Origin header, почему запрос отлично работает с cURL?Существуют библиотеки узлов и библиотеки Ruby для доступа к API-интерфейсу Shopify, поэтому трудно поверить, что они просто вообще не разрешают доступ из javascript.

Итак, я думаю, мой вопрос: что я могу сделать, чтобы получить доступ к этому API с помощью JavaScript?

1 Ответ

0 голосов
/ 27 ноября 2018

Вы делаете это неправильно, если получаете ошибки CORS.Это означает, что вы открываете свои ключи API для юниверса.Big Clue!

Вместо этого вы можете захотеть исследовать, используя приложение, установленное в вашем магазине, для совершения звонков JS.Для этого вы можете использовать прокси приложения.И любое приложение, которое вы устанавливаете, может получить доступ к любой конечной точке API, для которой вы получили одобренные области действия.Таким образом, запрос местоположения вернет их вам, если ваше приложение будет одобрено, чтобы запросить их.

Просто!

...