Como título. Soy muy nuevo en este tema, así que usaré el ejemplo para describir lo que quiero lograr:
?token=DSKLFJOS... .fetch para intentar obtener el token de 302 y agregarlo a la URL de la solicitud (redireccionamiento) ?token=... para que la segunda solicitud obtenga 200 . Mi pensamiento: tal vez esto se pueda lograr después de obtener más información sobre las credentials y/o las opciones de redirect de la API de fetch . ¡Pero no estoy seguro de esto!
Este es el código actual que fallará con 404 (en la segunda solicitud). No está escrito por mí, así que no lo entiendo. (y lamento no poder publicar el código completo ya que es un contenido privado)
fetch(filePath) .then(response => response.arrayBuffer()) .then(arrayBuffer => callback(arrayBuffer, arrayBuffer.byteLength));Gracias por tu lectura. Si alguna de mis ideas es incorrecta, no dude en corregirme y publicarla como respuesta.
Tal vez algo como esto funcione. Básicamente, solo verifica el código de estado, y si es 302, volverá a buscar la respuesta con el token, luego, si el estado aún es mayor que 300, devuelve nulo, si no, devuelve la respuesta JSON.
async function getImage(url, token) { let response = await fetch(url); // You can also say if (response.status >= 300 && response.status < 400) if (response.status === 302) { response = await fetch(`${url}?token=${token}`); } if (response.status >= 300) { return null; } return response.json(); }Con la ubicación de los encabezados sería algo como esto:
async function getImage(url) { let response = await fetch(url); if (response.status === 302) { response = await fetch(`${url}?token=${response.headers.get('location')}`); } return response.json(); }Elimino el segundo si solo para simplificar la respuesta y solo teniendo en cuenta que la solicitud sería exitosa.
Puede realizar otra solicitud con la nueva URL con fetch(originalResponse.url + token) .
La propiedad de solo lectura
urlde la interfaz Response contiene la URL de la respuesta. El valor de la propiedadurlserá la URL final obtenida después de cualquier redireccionamiento.
de https://developer.mozilla.org/en-US/docs/Web/API/Response/url
Aquí hay un ejemplo:
let token = "abcdef" fetch("page-that-redirects.com/") .then(response => { if (response.status === 404) { fetch(response.url + "?token=" + token) .then(/* do something */) } }) // Or with async/await: let response = await fetch("page-that-redirects.com/") if (response.status === 404) { let newResponse = await fetch(response.url + "?token=" + token) /* do something */ }