Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Nedaří se mi načíst odpověď přes http get

Snažím se načíst odpověď z URL https://pastebin.com/raw/5kG3bsEy

V prohlížeči Chrome to funguje OK, stejně tak v MS Edge i v klientovi Postman.
Ovšem, když se snažím tu odpověď načíst programově ve VueJS s využitím vue-resource.js, vrací mi to chybu.

Tady je kód funkce, která (ne)čte data:

    getData: function(){
      var url = "https://pastebin.com/raw/5kG3bsEy";
      var options =  {
        "method"  : "GET",   
        "followRedirects" : true,
        "muteHttpExceptions": true,
      }; 

      var headers = {
        "Accept": "*/*",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36",
        "Host": "pastebin.com",
        "Connection": "keep-alive",
        "Accept-Encoding": "gzip, deflate, br"
      };

      console.log("loading...");
      this.$http.get(url, options, headers).then(function (response) {
            console.log(response.data); 
            this.md = response.data;
      }).catch(function(error) {
        console.log("Error: ", error)
      });
    }

A dostanu odpověď - to co si zobrazím v konzoli:

Error: { url: 'https://pastebin.com/raw/5kG3bsEy',
ok: false,
status: 0,
statusText: '',
headers: { map: { '': [Array] } },
body: '',
bodyText: '' }

Přitom ale, když si načtu ve stejné funkci (!) URL třeba https://api.coindesk.com/v1/bpi/currentprice.json, pak dostanu odpověď s daty.

Věděl by někdo, kde je chyba? Mám něco v kódu špatně? Nebo mi prostě protistrana, tj. https://pastebin.com/raw/5kG3bsEy schválně vrací chybu?
Už si fakt nevím rady...

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
V pastebinu máš text, v tom druhom odkaze JSON... resp.data v Axiosu standardne odkazuje na objekt,…
Mlocik97 12.02.2020 00:02
Mlocik97
Inu, nepoužívám axios, ale vue-resource.js; ty hlavičky jsem přidával postupně právě proto, že mi to…
Pavel 12.02.2020 08:04
Pavel
To neznám... hm... ja už som Vue prestal riešiť skôr než začal (momentálne som sa zamiloval do Svelt…
Mlocik97 12.02.2020 09:07
Mlocik97
On ten kód je podle všeho v principu dobře, z jiných URL tu odpověď dostanu. This je v pořádku. nový
Pavel 12.02.2020 11:15
Pavel
no ja momentálne používam Svelte/Sapper a tieto ajax/rest veci riešim cez fetch(), skúšal som v takt… nový
Mlocik97 12.02.2020 11:49
Mlocik97
Vyzkoušel jsem ještě načíst místo textu objekt JSON a opět stejná chyba. Vysvětlení viz hynajs. Škod… nový
Pavel 23.02.2020 10:45
Pavel
V rychlosti jsem zkusil PHP a k úspěchu stačily tyto řádky: $url="https://pastebin.com/raw/5kG3bsE…
hynajs 12.02.2020 08:51
hynajs
Díky za ověření, v PHP ti to teda funguje dobře. Pořád nevím co ještě udělat, abych to načetl ve svý…
Pavel 12.02.2020 08:54
Pavel
Chyba asi nebude v kódu. Když použiju jQuery k jednoduchému $.ajax({ url: 'http://pastebin.com/raw…
hynajs 12.02.2020 09:46
hynajs
Až teď mne napadlo podívat se do konzole a vidím vysvětlení: Cross-Origin požadavek byl zablokován:…
hynajs 12.02.2020 10:21
hynajs
A co zkusit použít místo var url = "https://pastebin.com/raw/5kG3bsEy"; toto var url = "https://c…
host 12.02.2020 10:25
host
Opět error: Cross-Origin požadavek byl zablokován: Same Origin zásada nepovoluje načtení vzdáleného…
hynajs 12.02.2020 10:30
hynajs
Hm, tak se použití PHP asi opravdu nevyhne. :-| https://enable-cors.org/server_php.html nový
host 12.02.2020 10:40
host
Zkusil jsem https://cors.io/?https://pastebin.com/raw/5kG3bsEy i přidat hlavičku "Access-Control-Al… nový
Pavel 12.02.2020 11:13
Pavel
Ta hlavička musí být v odpovědi, jak jsem psal - takže by ji tam musel přidat tvůrce pastebin.com .… nový
hynajs 12.02.2020 11:18
hynajs
On ten server i odpoví, prohlížeč odpověď dostane, ale zablokuje ji. Nevím, zda ti dost rozumím. Kd… nový
Pavel 12.02.2020 11:21
Pavel
Ale tam žádost netvoříš a odpověď nečteš Javascriptem. Podívej se, prosím, do web-konzole - určitě u… nový
hynajs 12.02.2020 11:29
hynajs
Jestli to správně chápu: Já pošlu požadavek a ten je OK, server pošle odpověď a ta je taky OK. Na mé… nový
Pavel 12.02.2020 11:38
Pavel
Ano - jinak si hlášení neumím vysvětlit. Nejenom Chrome. Psal jsem hlášení Firefox. V Chrome vypadá… nový
hynajs 12.02.2020 12:26
hynajs
https://pastebin.com/api nový
Mlocik97 23.02.2020 11:12
Mlocik97
Připoj, prosím, ještě funkční příklad kódu v klientském Javascriptu. Zdůraznil jsem v klientském - o… nový
hynajs 23.02.2020 11:34
hynajs
Pujde ti to pouze v PRO verzi pastebin, ta pridava CORS hlavicky. https://pastebin.com/pro?help=1… nový
MaSo 24.02.2020 14:06
MaSo
Díky za info. Platit za to nebudu, šlo o hobby záležitost; vyřeším si to jiným způsobem. nový
Pavel 24.02.2020 18:31
Pavel
Platit nemusis, ten proxy script muzes mit na jakemkoliv freehostinu s PHP... poslední
MaSo 24.02.2020 19:32
MaSo

V pastebinu máš text, v tom druhom odkaze JSON... resp.data v Axiosu standardne odkazuje na objekt, což v tvojom textovom súbore neexistuje.

Ďalšia vec sú hlavičky, snaž sa používať len tie čo potrebuješ...

Inu, nepoužívám axios, ale vue-resource.js; ty hlavičky jsem přidával postupně právě proto, že mi to nefungovalo, zkusím to ještě jednou bez nich.

Nevěřím tomu, že by mělo vliv na odpověď z URL adresy to, zda se vrací text v plain/text nebo JSON v plain/text.

To neznám... hm... ja už som Vue prestal riešiť skôr než začal (momentálne som sa zamiloval do Svelte/Sapper, což je 5x lepší Angular)... btw, tie vue-resources používa axios, takže je to jedno. Popravdebod kedy daly do JS fetch() tak je to najlepší spôsob ako získať dáta..

inak síce to neviem, ale nezdá sa mi že i to this. by malo byť v this.$http.get() když tam máš promise, a neviem prečo je tam option get když get už voláš nad $http

no ja momentálne používam Svelte/Sapper a tieto ajax/rest veci riešim cez fetch(), skúšal som v takto JSONy z pastebinu a nemal som problém.

Chyba asi nebude v kódu.
Když použiju jQuery k jednoduchému


    $.ajax({
        url: 'http://pastebin.com/raw/5kG3bsEy', success: function(data){
            alert("úspěch");
        }
        , error: function(data){
            alert("error");
        }
    })

dostanu sice error, ale v Nástrojích pro vývojáře->Síť->Odpověď tu plaintext odpověď vidím .

Až teď mne napadlo podívat se do konzole a vidím vysvětlení:

Cross-Origin požadavek byl zablokován: Same Origin zásada nepovoluje načtení vzdáleného zdroje na https://pastebin.com/raw/5kG3bsEy. (Důvod: chybí hlavička CORS 'Access-Control-Allow-Origin').

Takže Javascriptem přes prohlížeč odpověď nedostaneš (leda by sis něco vypnul -ale to nevím) . Ta hlavička musí být v odpovědi.
Chyba není v knihovně ani v kódu.
Musíš použít PHP či jiný serverový jazyk.

Ta hlavička musí být v odpovědi, jak jsem psal - takže by ji tam musel přidat tvůrce pastebin.com .
On ten server i odpoví, prohlížeč odpověď dostane, ale zablokuje ji.
Možná bude skript fungovat na nějaké staré verzi prohlížeče na starém PC s XP, což je slabá útěcha.

Jestli to správně chápu: Já pošlu požadavek a ten je OK, server pošle odpověď a ta je taky OK. Na mé straně se JS skript běžící v prohlížeči Chrome k odpovědi nedostane, protože dřív než se k ní dostane ji blokne právě ten Chrome. Chápu to dobře?

Ano - jinak si hlášení neumím vysvětlit.
Nejenom Chrome. Psal jsem hlášení Firefox.
V Chrome vypadá hlášení ještě jasněji takto:

Access to XMLHttpRequest at 'https://pastebin.com/raw/5kG3bsEy' from origin 'http://www.bystricky.b3.cz' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

A v Network->XHR->Response vidím Fail to load response data.

Kdežto Firefox požadovanou odpověď v Síť->Odpověď aspoň takto zobrazí, jak jsem psal výše.

Připoj, prosím, ještě funkční příklad kódu v klientském Javascriptu.
Zdůraznil jsem v klientském - o něm diskuse je.
Nepochybuji, že serverový Javascript (např. Nodejs) bude úspěšný, ale o něj se tady nejedná.

Nějaké další doplňky nebo aplikace pro Firefox nebo Android najdeme na tools .

Zpět do poradny Odpovědět na původní otázku Nahoru