AJAX - błąd CORB przy próbie pobrania pliku .json

0

Cześć,

chciałbym zrobić aplikacje która sprawdza wyniki Lotto. Znalazłem aktualne wyniki w pliku .json link

Napisałem taki kod, który w moim zamyśle powinien pobrać ten plik .json, ale wyskakuje mi błąd Cross-Origin Read Blocking.

$.ajax({
type: 'GET',
url: 'http://serwis.mobilotto.pl/mapi_v6/index.php?json=getGames',
contentType: 'application/json',
dataType:'jsonp',
responseType:'application/json',
xhrFields: {
withCredentials: false
},
headers: {
'Access-Control-Allow-Credentials' : true,
'Access-Control-Allow-Origin':'*',
'Access-Control-Allow-Methods':'GET',
'Access-Control-Allow-Headers':'application/json',
},
success: function(data) {
console.log(data);
},
error: function(error) {
console.log("FAIL....=================");
}
});

Przeszukałem Stackoverflow, ale większość rozwiązań dotyczyła ustawień po stronie serwera, a reszta nie działa. Chciałbym się dowiedzieć jak wykonać to poprawnie i czy w ogóle da się taki plik pobrać.

Dzięki :)

1

A gdy sobie klikasz na ten link w przeglądarce, to czy jesteś w stanie wyświetlić zawartość podanego pliku? U mnie działa, po kliknięciu widzę w oknie przeglądarki dane z losowań.

0

Tak, jestem w stanie. Chodzi o to, że chcę te dane mieć w zmiennej, ponieważ muszę z nich wyciągnąć konkretne losowanie np. "Superszansa". A później te wyciągnięte liczby porównać z tymi wpisanymi przez użytkownika

1

Dziękuję za linki, przestudiowałem je bardzo dokładnie, niestety za każdym razem wyskakuje błąd CORB. Może to wynika z dobrych zabezpieczeń strony lotto.

Próbowałem też metody z XmlHttpRequest lecz wtedy wyskakiwał CORS. Z czystej ciekawości ściągnąłem rozszerzenie do Chrome, które "zmienia" CORS (Moesif Origin & CORS Changer). Jeśli ta wtyczka jest włączona to wszystko działa, natomiast nie wydaje mi się, żeby to było dobre rozwiązanie ponieważ każdy kto chciałby skorzystać z aplikacji musiałby pobrać tą wtyczkę.

3

Możesz obejść problem CORS strzelając przez proxy. Robisz request używajać ajax więc spróbuj tego https://jsonp.afeld.me/

1

Podane powyżej rozwiązanie jest super, ale ma jeden problem - jeśli z jakiegoś powodu serwer jsonp.afeld.me padnie albo się zmieni jego konfiguracja, to automatycznie skrypty z niego korzystające zostają odłączone. Poza tym na podanej stronie jest informacja o tym, że jsonp.afeld.me is rate limited - więc mogą się pojawiać dziwne zachowania, gdy okresowo serwer będzie niedostępny.

Ja wczoraj wieczorem trochę kombinowałem, bo miałem nadzieję, że uda mi się to jakoś obejść/rozwiązać problem. Skoro można na stronie osadzić zewnętrzną treść, chociażby w <iframe> albo <object>, to miałem nadzieję, że jakoś uda się do niej dostać z poziomu JavaScript. Niestety, mimo 2-3 godzin kombinowania, nie udało mi się z nich wyciągnąć treści (na co liczyłem) :(

Ponieważ CORB działa na poziomie przeglądarki, można to obejść w sposób zbliżony do podanego powyżej, ale w oparciu nie o zewnętrzny/niezależny od nas serwer, tylko o własny. Pytanie tylko, czy OP ma możliwość odpalenia gdzieś skryptu PHP? Sam skrypt to dosłownie 3-4 linie, które pobierają treść z podanego linku, a następnie ją zwracają przez AJAX do strony potrzebującej danych.

Plusem zrobienia tego na własnym PHP jest to, że można od razu dane odpowiednio przetworzyć. Pobierając JSON'a (czy jakkolwiek te dane z Lotto są zwracane) dostajesz plik, który trzeba parsować, wyciągać potrzebne wiadomości itp. A robiąc to na poziomie skryptu PHP, możesz całą "magię" wykonać na serwerze, z pominięciem JS u klienta. Ostatecznie JS może się zwracać z zapytaniem do PHP o konkretne dane i zamiast otrzymywać całą serię losowań, otrzyma jeden interesujący Cię wynik.

1

Tak jak pisałem, to jest obejście problemu a nie jego rozwiązanie. Taki request powinien iść od strony naszego serwera a ten z kolei wystawi nam dane. Skoro OP bawi się JS to może sobie taki prosty serwer napisać w NodeJS.

1 użytkowników online, w tym zalogowanych: 0, gości: 1