2017-01-24 29 views
1

OpenSky-Network - это API для определения местоположения самолетов во всем мире. Замечательно играть с Openlayers-3 ... но! (Потому что есть, но!)API Opensky Network недоступен для доступа к данным

С помощью JavaScript я пытаюсь получить доступ к некоторым переменным данных JSON в this URL

Я действительно заблокирован. Он доступен с простой навигацией в Firefox, а не с JavaScript.

Это кажется действительно глупым, потому что он работает с другими API-интерфейсами, такими как this one или другими, такими как Wikipedia, Wikidata, Nominatim for Openlayers-3.

Я действительно спрашиваю себя, почему это не работает только для OpenSky-Network. Единственное, что я увидел, это то, что Firefox показывает мне проблему между доменами, но я уверен, что есть решение.

я пытался много методов:

Tech1

$.getJSON(url , function(data) { 
    console.log(data); 
}); 

Tech2

$.ajax({ 
    url: url, 
    type: 'GET', 
    success: function(data) { 
     console.info(data); 
    } 
}); 

Tech3

$.ajax({ 
    url: url, 
    dataType: 'jsonp', 
    crossDomain : true, 
    success:function(xhr, json){    
     alert("Success "); 
    }, 
    error:function(){ 
     alert("Error"); 
    }  
}); 

Tech4

var xhr = null; 
var response = null; 

if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } 
else { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } 

xhr.onreadystatechange = function() { 
    console.info("state changed"); 

    if (xhr.readyState === 4) { 

     if (xhr.status === 200) { 
      response = xhr.responseText; 
      console.info("response="+response); 
     } 
    } 
    else {} 
}; 

xhr.open("GET", url,true); 
xhr.send(null); 

Со всеми этими и другими методами, я не могу получить данные в формате JSON в Opensky URL-адрес API. Я имею в виду, я хочу использовать его как переменную JavaScript, но я не могу.

Это очень неприятно, потому что в инспекторе (ключ F12 в Firefox) я вижу объект JSON и его значения. Существует политическая проблема «того же происхождения», а затем у меня нет переменной. В чем проблема? Я действительно не могу понять суть концепции политики «того же происхождения», английский - не мой родной язык.

В соответствии с разделом ограничений документария API я могу сделать это без регистрации.

Анонимные пользователи, которые обращаются к API без использования учетных данных. Ограничения для анонимных пользователей являются:

  • Анонимные пользователи могут получить только самые последние векторы состояния, то есть временной параметр будет проигнорирован.

  • Анонимные пользователи могут получать данные только с временным результатом 10 секунд.Это значит, API будет возвращать векторы состояния для времени сейчас- (теперь мод 10)

Таким образом, у меня есть несколько вопросов:

  1. Могу ли я получить доступ к переменным в URL API OpenSky-Network с JavaScript?

  2. Почему этот конкретный URL-адрес имеет проблемы?

  3. В чем проблема с политикой «того же происхождения» только для этого URL-адреса?

ответ

1

Я один из разработчиков OpenSky.

Как уже упоминалось ранее, API OpenSky не разрешил CORS. Недавно мы включили эту функцию, чтобы теперь вы могли получить доступ к API из браузера и любого домена.

+0

Очень хорошо, что он работает очень хорошо! Благодаря! – KBill

0

Как уже говорилось выше же происхождения политики (СОП) является проблемой здесь.

Кажется, действительно глупо, потому что его работа с другими API, как this one или другой, как Wikipedia, викиданные, Nominatim для OpenLayers-3.

  1. В чем проблема с политикой «того же происхождения» только для этого URL-адреса?

Когда сервер получает входящий запрос, он может проверить Origin поле в заголовке запроса и либо разрешить или запретить запрос относительно СОП. Обратите внимание, что «disallow» не означает, что сервер отрицает данные, но не устанавливает поле Access-Control-Allow-Origin в заголовке ответа, заставляя ваш браузер блокировать запрос. Чтобы браузер разрешил запрос, поле Access-Control-Allow-Origin в заголовке ответа должно быть либо равно Origin, либо *. API, который вы указали в качестве примера (http://ipinfo.io/213.32.89.142/json), возвращает Access-Control-Allow-Origin: *, поэтому разрешает запросы от каждого источника.

  1. Почему у этого конкретного URL-адреса возникают проблемы?

OpenSky API не включает Access-Control-Allow-Origin поля в заголовке ответа, который означает, что ваш браузер блокирует запрос и запрещает доступ к полезной нагрузке от сервера (если скрипт выдачи requestwas загружается из другого происхождения , ваш сервер). Как вы заметили в консоли отладки, данные есть, но ваш браузер ограничивает доступ.

Могу ли я получить доступ к переменным по URL-адресу API OpenSky-Network с JavaScript?

В последнее время было такое же issue на GitHub. Запросы на кросс-поиск не будут доступны в ближайшее время. Вам придется проксировать запросы API с помощью вашего веб-сервера.

Если у вас возникнут какие-либо трудности с нашими услугами в будущем, я бы порекомендовал разместить ваш вопрос в OpenSky Forum. Я нашел эту нить случайно. Вопросы на Форуме будут уведомлять всех администраторов OpenSky и позволять нам реагировать как можно быстрее.