• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd CORS podczas łączenia się z url XML

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
775 wizyt
pytanie zadane 26 września 2023 w JavaScript przez Kamil3224 Nowicjusz (210 p.)
edycja 26 września 2023 przez Comandeer

Cześć wszystkim,   gdy próbuję zaczytać XML z linku dostaję taki komunikat: test2.html:1 Access to fetch at 'https://demo1.voxdeveloper.com/webservice/realestatestatuslist/api_key/[ciach]/investment_id/15' from origin 'http://127.0.0.1:5500' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled. Nie wiem jak się tego pozbyć.  Podsyłam kawałęk kodu:


        const url = "https://demo1.voxdeveloper.com/webservice/realestatestatuslist/api_key/[ciach]/investment_id/15"; 
        fetch(url)
            .then(response => {
                if (response.ok) {
                    return response.json();
                } else {
                    console.error('Error fetching data');
                    throw new Error('Network response was not ok');
                }
            })

Z góry dziękuję.

1
komentarz 26 września 2023 przez Comandeer Guru (607,060 p.)
Pozwoliłem sobie wyciąć klucz API z posta.

1 odpowiedź

+2 głosów
odpowiedź 26 września 2023 przez Comandeer Guru (607,060 p.)

Błąd jest spowodowany przez to, że serwer w odpowiedzi nie umieszcza odpowiedniego nagłówka HTTP. To nie jest coś, co jesteś w stanie rozwiązać po swojej stronie. Można to jedynie próbować obejść przy pomocy usług typu CORS Anywhere.

komentarz 26 września 2023 przez Kamil3224 Nowicjusz (210 p.)
Okej, dziękuję
komentarz 1 października 2023 przez Kamil3224 Nowicjusz (210 p.)

Dodałem to co trzeba ale daj jest to samo. 

const xhr = new XMLHttpRequest();

const url = "https://demo1.voxdeveloper.com/webservice/realestatestatuslist/api_key/ab33c2fb8240c8c7ca015d924713b5d234b7778e/investment_id/15";
xhr.open("GET", url, true);

xhr.setRequestHeader('Access-Control-Allow-Origin', 'http://localhost:3000');
xhr.setRequestHeader('Access-Control-Allow-Methods', 'GET');
xhr.setRequestHeader('Access-Control-Allow-Headers', 'Content-Type');

xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
        const xmlResponse = xhr.responseText;

        const parser = new DOMParser();

        const xmlDoc = parser.parseFromString(xmlResponse, "text/xml");

        const idElement = xmlDoc.getElementsByTagName("id")[0];

        const realestateId = idElement.textContent;

        console.log("ID <realestate>: " + realestateId);
    }
};

xhr.send();

 

komentarz 1 października 2023 przez Kamil3224 Nowicjusz (210 p.)
edycja 1 października 2023 przez Arkadiusz Waluk

Jeszcze próbowałem dodać link https://cors-anywhere.herokuapp.com, działał przez chwilę i  znów zablokowali

<!DOCTYPE html>

<html>

<head>

    <title>Pobieranie danych z API</title>

</head>

<body>

    <h1>Dane z API</h1>

    <div id="result"></div>

 

    <script>

        function getCurrentTimeInSeconds() {

        return Math.floor(Date.now() / 1);

        }

 

 

        function isDataInCacheValid(cacheData) {

            if (cacheData && cacheData.timestamp) {

                const currentTime = getCurrentTimeInSeconds();

                return currentTime - cacheData.timestamp <= 3600;

            }

            return false;

        }

 

 

        function fetchData() {

            var xhr = new XMLHttpRequest();

            var url = "https://demo1.voxdeveloper.com/webservice/realestatestatuslist/api_key/ab33c2fb8240c8c7ca015d924713b5d234b7778e/investment_id/15";

 

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

 

           

            xhr.setRequestHeader("Content-Type", "text/html");

 

       

            xhr.onreadystatechange = function () {

                if (xhr.readyState === 4) {

                    if (xhr.status === 200) {

                     

                        var responseXML = xhr.responseXML;

 

                     

                        var realestates = responseXML.getElementsByTagName("realestate");

 

                     

                        for (var i = 0; i < realestates.length; i++) {

                            var idElement = realestates[i].getElementsByTagName("id")[0];

                            var idValue = idElement.textContent;

 

                         

                            if (idValue === "2051") {

                                console.log("ID: " + idValue);

                             

                            }

                        }

                    } else if (xhr.status === 429) {

                     

                        console.log("Przekroczono limit żądań. Spróbuj ponownie po " + xhr.getResponseHeader("Retry-After") + " sekundach.");

                    }

                }

            };

 

         

            xhr.send();

        }

 

   

      setInterval(fetchData, 50000);

    </script>

</body>

</html>
komentarz 1 października 2023 przez Comandeer Guru (607,060 p.)

@Kamil3224, 

Dodałem to co trzeba ale daj jest to samo. 

Tak jak mówiłem: to nie jest coś, co możesz rozwiązać po swojej stronie. To musi zrobić serwer, z którego pobierasz dane.

Jeszcze próbowałem dodać link https://cors-anywhere.herokuapp.com, działał przez chwilę i  znów zablokowali

Bo to jest tylko do celów developerskich. Jak chcesz korzystać na stałe z CORS Anywhere, musisz postawić własną instancję. 

komentarz 2 października 2023 przez Kamil3224 Nowicjusz (210 p.)
Okej, udało się przez Gita z linku który dostałem od Comandeer. Dziękuję za pomoc :D

Podobne pytania

0 głosów
1 odpowiedź 208 wizyt
pytanie zadane 3 stycznia 2021 w JavaScript przez Linwa Nowicjusz (160 p.)
0 głosów
1 odpowiedź 277 wizyt
pytanie zadane 18 stycznia 2019 w JavaScript przez BlvckFox Gaduła (4,240 p.)
0 głosów
1 odpowiedź 240 wizyt
pytanie zadane 14 września 2019 w JavaScript przez Louel Nowicjusz (140 p.)

93,434 zapytań

142,429 odpowiedzi

322,662 komentarzy

62,799 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...