Προς το περιεχόμενο

Κατέβασμα json από url - Σφάλμα


Lanike71

Προτεινόμενες αναρτήσεις

Καλησπέρα, δοκίμασα να κατεβάσω ένα json από σελίδα και μου πέταξε το εξής σφάλμα:

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSMissingAllowOrigin

Αν κατάλαβα καλά, είναι ζήτημα αν η σελίδα που κατέχει το json το δίνει σε άλλο σέρβερ ή όχι.

Δεδομένου όμως ότι το ίδιο json το κατέβασα εύκολα με java και χωρίς κάποιο περιορισμό, τι μπορώ να κάνω;

Δοκίμασα και κάτι περίεργες λύσεις όπως μέσω proxy, αλλά και πάλι δε δούλεψε.

https://stackoverflow.com/questions/10636611/how-does-access-control-allow-origin-header-work

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μία λύση που έχω εφαρμόσει και εγώ είναι να το πάρεις με το backend και να το ζητάς μετά από το δικό σου server

Δηλαδή αντί js->json_url κάνεις js->my_server->json_url

Αν χρειάζεσαι παράδειγμα σε php ή WP πες μου.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

17 ώρες πριν, k33theod είπε

Μία λύση που έχω εφαρμόσει και εγώ είναι να το πάρεις με το backend και να το ζητάς μετά από το δικό σου server

Δηλαδή αντί js->json_url κάνεις js->my_server->json_url

Αν χρειάζεσαι παράδειγμα σε php ή WP πες μου.

Ναι αυτή τη λύση σκέφτηκα κι εγώ, αφού δε βρίσκω άκρη.

Αν έχεις λινκ με παράδειγμα, θα με διευκόλυνε, ευχαριστώ.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Δεν είναι link είναι κώδικας που έχω χρησιμοποιήσει στέλνει json λαμβάνει json

js

fetch('./file_on_myserver.php', 
      {
        method: 'POST', // or 'PUT'
           headers: 
          {
            "Content-Type":"application/json"
          },
          body: JSON.stringify(My_data),//To My_data είναι έγγυρο json που το κάνεις εσύ στο Front
      })
     .then((response) => response.json())
     .then((data) => {
        //use of data
     })
     .catch(err =>  console.log(err));//error handler eg

php στο σερβερ

<?php
$ch = curl_init("http://v22019068494590849.quicksrv.de:7380");//To service
    
curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));//xreiazetai
curl_setopt($ch, CURLOPT_POSTFIELDS,file_get_contents('php://input')); //to json apo to fetch js
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); xreiazetai
    
$result = curl_exec($ch);
    
echo $result;
curl_close ( $ch );

 

Επεξ/σία από k33theod
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν ξέρω αν το είπα σωστά, αλλά θέλω το εξής:

Να κατεβάζω ένα json από μία σελίδα. Ενώ σε java δε δημιούργησε πρόβλημα, η js δεν τα καταφέρνει, πετάει μήνυμα στην κονσόλα:

"Αιτία: η κεφαλίδα ‘Access-Control-Allow-Origin’ του CORS απουσιάζει".

Δοκίμασα με ajax, άλλαξα και τον τύπο σε jsonp αλλά πάλι τίποτα.

Δοκίμασα και με fetch και πάλι τα ίδια...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

html

 

api_opap.PNG

opaphtml.PNG

opapjs.PNG

opapphp.PNG

Αυτό είναι πλήρες. Δυστηχώς δεν μπορώ να ανεβάσω κώδικα γιατί με blockarei

Η ουσία είναι δεν κάνω XHR request στον opap γιατί ο browser δεν το επιτρέπει λόγω CORS. Κάνω λοιπόν το request στον server μου. O server μου κάνει request στον οπαπ κάνένα πρόβλημα με CORS γιατί δεν τρέχει στον browser.

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν την καταλαβαίνω και τόσο τη λογική του όλου, αλλά αφού δουλεύει, ευχαριστώ.

Δηλαδή στην ουσία με js εκτελείς την php που είναι στο σέρβερ σου και το επιτρέπει επειδή απλά δεν τρέχει στο browser;

Νομίζω και το λνκ που παρέθεσα, την ίδια λογική είχε η λύση

https://stackoverflow.com/questions/10636611/how-does-access-control-allow-origin-header-work

που χτυπούσες μέσω του https://cors-anywhere.herokuapp.com/ το λινκ που ήθελες αλλά και πάλι δε δούλευε.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η λογική είναι η εξής. Έχω ένα browser που δεν επιτρέπει cross origin request.

For security reasons, browsers restrict cross-origin HTTP requests initiated from scripts. For example, XMLHttpRequest and the Fetch API follow the same-origin policy. This means that a web application using those APIs can only request resources from the same origin the application was loaded from unless the response from other origins includes the right CORS headers.

Οκ δεν μπορώ να πάρω τα data που θέλω με τον browser. Μήπως μπορώ κάπως αλλιώς. Ναι μπορώ με java όπως ανέφερες.

Ζητάω λοιπόν τα data που θέλω με τον browser από την java. H java παίρνει το request από τον browser το στέλνει στη δική της γλώσσα στο api του opap  και όταν έρχεται η απάντηση τη στέλνει πίσω στον browser. Είναι δηλαδή ο ενδοιάμεσως γιατί δεν επιτρέπεται επικοινωνία μεταξύ browser opap. Δεν ξέρω αν μπορώ να το πω πιό απλά.

Κάποια πράγματα που γράφονται στην ερώτηση του  link όπως

The response header of MyCode.js contains Access-Control-Allow-Origin: http://siteB, which I thought meant that MyCode.js was allowed to make cross-origin references to the site B.

δεν βγάζουν κανένα νόημα οπότε δεν ξέρω τι ακριβώς γράφουν

Η απάντηση φένεται σωστή δεν δείχνει όμως λύση που σου έγραψα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Σκέφτηκα τώρα ένα ισοδύναμο.

Πως παίρνει το site δεδομένα από την database;

Τα ζητάει από thn java sτο server. O java κάνει το query to stelnei sthn database pairnei thn apanthsi tin stelnei sto site. Και όλο αυτό γιατί ο browser δεν επιτρέπει επικοινωνία με την database

Είναι ακριβώς η ίδια λογική.

Επεξ/σία από k33theod
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...