Ошибка CORS для запроса к конечной точке api.upcitemdb.com

Я знаю, что это такой простой код, но почему-то он не работает. Что мне делать, так это вызвать GET API:

https://api.upcitemdb.com/prod/trial/lookup?upc=4011200296908

Я хочу вызвать этот HTML с помощью JavaScript или JQuery. Я много чего пробовал, но не работает. Следующий код, который я применил, но не работает:

<!DOCTYPE html>
<html>
<body>

<button type = "button" onclick = "loadDoc()">Request data</button>

<script>
function loadDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      alert("responseText" + this.responseText);
    } else {
      alert("Error");
    }
  };
  xhttp.open("GET", "https://api.upcitemdb.com/prod/trial/lookup?upc=4011200296908", true);
  xhttp.send();
}
</script>

</body>
</html>

Я также попытался вызвать тот же API с JQuery с помощью Ajax. Ниже приведен код того же:

<!DOCTYPE html>
<html>
<body>
<header>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</header>
<button type = "button" onclick = "loadDoc()">Request data</button>

<script>
function loadDoc() {
    $.ajax({
        url:"https://api.upcitemdb.com/prod/trial/lookup?upc=4011200296908",
        success:function(response){
          alert(response);          
        },
       error: function() {
        alert("Error");
        }
    });
}
</script>

</body>
</html>

У вас есть ошибка в консоли, чтобы поделиться?

Hammerbot 28.09.2018 14:32

Я пробовал код «XMLHttpRequest» и получаю ошибку в консоли @Hammerbot: не удалось загрузить ресурс: net :: ERR_CERT_AUTHORITY_INVALID

Ronak Joshi 28.09.2018 14:34

Всегда неплохо заглянуть в приставку: Failed to load https://api.upcitemdb.com/prod/trial/lookup?upc=401120029690‌​8: The 'Access-Control-Allow-Origin' header has a value 'https://www.upcitemdb.com' that is not equal to the supplied origin. Origin 'null' is therefore not allowed access.

freedomn-m 28.09.2018 14:35

Спасибо за подробный журнал. Можете ли вы сказать, в чем причина отказа этого API? @ Freedomn-m

Ronak Joshi 28.09.2018 14:36

Вы не можете совершать звонки на сторонние сайты, если они не установили CORS. Вот как это работает. Прочтите об одной и той же политике происхождения и COR

epascarello 28.09.2018 14:41

Итак, эта доза "upcitemdb.com" не предоставляет их для вызова API из HTML-кода? Потому что я могу вызвать этот же API из собственного кода Android. @epascarello

Ronak Joshi 28.09.2018 14:42

Почитайте про ту же политику происхождения ..... developer.mozilla.org/en-US/docs/Web/Security/…

epascarello 28.09.2018 14:44

У меня пока нет веб-сервера. У меня только одна HTML-страница. Итак, решения CORS реализуются в конфигурации сервера, что мне пока не нужно. @sideshowbarker

Ronak Joshi 28.09.2018 19:15

Решение CORS необходимо реализовать в конфигурации сервера https://api.upcitemdb.com/prod/trial/lookup. Поскольку вы не контролируете этот сервер, единственным вариантом будет сделать запрос через прокси-сервер. См. Раздел Как использовать прокси-сервер CORS, чтобы обойти проблемы «Нет заголовка Access-Control-Allow-Origin» ответа на stackoverflow.com/questions/43871637/…

sideshowbarker 28.09.2018 23:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
9
517
1

Ответы 1

Классический!

Если вы откроете вкладку разработчика (f12), вы можете увидеть следующую ошибку:

Failed to load https://api.upcitemdb.com/prod/trial/lookup?upc=4011200296908: The 'Access-Control-Allow-Origin' header has a value 'https://www.upcitemdb.com'

Это означает, что сервер https://api.upcitemdb.com не хочет, чтобы вы использовали его ресурсы ни на каком веб-сайте, кроме «https://www.upcitemdb.com». Если вы не являетесь владельцем этого сайта, вы не можете загружать его ресурсы или должны попросить администратора предоставить вашему сайту авторизацию. Если он у вас есть, узнайте больше о конфигурации CORS.

Но тогда почему этот URL-адрес работает, если я нажимаю его в веб-браузере?

Ronak Joshi 28.09.2018 14:38

А если есть необходимость, я уже приобрел их премиум-план. Итак, у меня есть секретный ключ и клиентский ключ, которые я могу отправить в заголовке. Но дело даже в том, что это тоже не работает.

Ronak Joshi 28.09.2018 14:39

Хорошо, это вопрос безопасности: каждый может получить доступ к этому сайту с помощью браузера, но другие сайты не могут. Представьте, что страница google.com включает ваш скрипт, это заставит всех клиентов Google в мире попытаться подключиться к api.upcitemdb.com и DoS-серверу. Чтобы противостоять этому, сайт A может загружать ресурс с сайта B, только если сайт B сообщает в заголовке, что A авторизован.

Damien Gilles 28.09.2018 14:42

Затем следует указать заголовок запроса в $ .ajax или через XHR. Этот пост может вам помочь: stackoverflow.com/questions/10093053/…

Damien Gilles 28.09.2018 14:45

Если я передаю заголовки, я получаю сообщение об ошибке ниже: ERR_CERT_AUTHORITY_INVALID @Damien Gilles

Ronak Joshi 28.09.2018 15:00

ERR_CERT_AUTHORITY_INVALID означает, что вы, навигатор, думаете, что сертификат, используемый для https сервером, не заслуживает доверия. С вашей стороны делать нечего, вам следует связаться с api.upcitemdb.com.

Damien Gilles 28.09.2018 15:09

Я заметил, что вы используете / prod / trial, возможно, вам стоит использовать / prod / v1, если вы больше не являетесь пользователем пробной версии

Damien Gilles 28.09.2018 15:11

Когда я использую заголовки, я использую этот URL "api.upcitemdb.com/prod/v1/lookup".

Ronak Joshi 28.09.2018 15:12

Другие вопросы по теме