Logré obtener una respuesta JSON en Postman, pero obtuve una respuesta vacía en la consola, sin ningún error.
aquí está el código:
function getFetch() { const url = `https://fantasy.premierleague.com/api/bootstrap-static/`; let requestOptions = { method: "GET", redirect: "follow", mode: 'no-cors', "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET", "Access-Control-Allow-Headers": "x-requested-with" }; fetch( "https://fantasy.premierleague.com/api/bootstrap-static/", requestOptions ) .then((response) => response.text()) .then((result) => console.log(result)) .catch((error) => console.log("error", error)); }
Suponiendo que está intentando eso en el navegador, del lado del cliente:
mode: 'no-cors'
no tienen acceso al cuerpo de la respuesta ni a los encabezados, básicamente envían datos a ciegas pero no pueden ver el resultado.
Esos encabezados Access-Control-…
no son para la solicitud, sino para la respuesta del servidor. Si el servidor respondiera con ellos, la respuesta sería legible desde todos los orígenes. (Siempre que dichas solicitudes no estuvieran autolimitadas por el mode: no-cors
como se describe anteriormente).
Puede ver que no importa lo que obtenga, la respuesta siempre es con status: 0
y ok: false
:
function runFetch() { console.clear(); fetch( url.value, { mode: nocors.checked ? 'no-cors' : 'cors' }, ) .then((response) => { console.log('Response status:', response.status, ', OK:', response.ok); return response.text() }) .then((result) => console.log("Result: »" + result + "«")) .catch((error) => console.log("error", error.message)); } runFetch()
<label>URL: <input id="url" value="https://fantasy.premierleague.com/api/bootstrap-static/" /></label> <br><label>no-cors: <input type="checkbox" id="nocors" checked /></label> <br><button onclick="runFetch()">run</button>