Ошибка: перекрестное происхождение null запрещено с JSDOM, пытающимся получить файл json

Я пытаюсь получить заблокированные страны для видео на YouTube по его идентификатору, используя API, предоставленный unblockvideos.com в виде файла json в среде node.js. Я использую тот же синтаксис для получения метаданных видео YouTube с помощью API YouTube v3, и он работает нормально, поэтому я не знаю, почему это приведет к ошибке.

var jsdom = require("jsdom");
const { JSDOM } = jsdom;
const { window } = new JSDOM();
const { document } = (new JSDOM('')).window;
global.document = document;
var $ = jQuery = require('jquery')(window);


$.get('https://api.unblockvideos.com/youtube_restrictions?id=vMHZdfRWF94', function(ubjson) {

  //code

});

вот мой вывод консоли:

Ошибка: перекрестное происхождение null запрещено в dispatchError (/home/nodeworkspace/node_modules/jsdom/lib/jsdom/living/xhr-utils.js:60:19) в Object.validCORSHeaders (/ home / nodeworkspace / node_modules / jsdom / lib / jsdom / living / xhr-utils.js: 72: 5) в receiveResponse (/home/nodeworkspace/node_modules/jsdom/lib/jsdom/living/xmlhttprequest.js:845:21) в Request.client.on.res (/ home / nodeworkspace / node_modules / jsdom / lib / jsdom / living / xmlhttprequest.js: 677: 38) в emitOne (events.js: 116: 13) в Request.emit (events.js: 211: 7) в Request.onRequestResponse (/home/nodeworkspace/node_modules/jsdom/node_modules/request/request.js:1066:10) в emitOne (events.js: 116: 13) в ClientRequest.emit (events.js: 211: 7) в HTTPParser.parserOnIncomingClient [как onIncoming] (_http_client.js: 544: 21) undefined


person copy    schedule 25.09.2018    source источник


Ответы (1)


Вы столкнулись с проблемой CORS: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

Вероятно, API отказывается предоставлять контент вашему браузеру, потому что unblockvideos.com не принимает «домен» вашего браузера.

Вам нужно будет связаться с unblockvideos.com, чтобы они занесли ваш домен в белый список.

person Magnum    schedule 25.09.2018
comment
Эй, спасибо за ответ. Это интересно, потому что он работает в моем браузере Chrome, и использование wget на том же компьютере также работает, поэтому я понимаю, что проблема в том, что смоделированный браузер сценария сообщает API о другом «домене», чем другой? - person copy; 25.09.2018
comment
Я ожидал, что wget не выйдет из строя, но я ожидал, что Chrome выдаст ошибку CORS, если домен не будет принят. Поскольку он не работает в JSDOM (как указано в трассировке стека), я подозреваю, что проблема может быть связана с нулевым источником. Возможно, это проблема самого JSDOM ... Я нашел этот список: github.com/ jsdom / jsdom / issues / 2024 Извините, я не могу углубиться в их тесты, чтобы определить, подходит ли он для вашего варианта использования. Но вы можете попробовать убедиться, что ваш JSDOM находится в последней версии, и посмотреть, все ли вы получаете сообщение об ошибке ... Удачи - person Magnum; 25.09.2018
comment
Обновление JSDOM ничего для меня не сделало, но я решил проблему, используя https.get вместо этого для получения файла. Спасибо за поддержку :) - person copy; 26.09.2018