Recibo un error al hacer una solicitud de búsqueda, el comando curl funciona bien, lo cual es
curl https://quizapi.io/api/v1/questions -G \ -d apiKey=my_keypero cuando hago una solicitud de javascript
fetch("https://quizapi.io/api/v1/questions", { body: "apiKey=my_key", headers: { "Content-Type": "application/x-www-form-urlencoded" }, method: "POST" }) .then((res) => res.json()) .then((data) => { console.log(data); });me sale un error
Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0Editar
fetch('https://quizapi.io/api/v1/questions', { headers: { 'X-Api-Key': `${apiKey}`, }, }) .then((res) => res.json()) .then((data) => { console.log(data); });Está recibiendo una respuesta HTML (probablemente un error 401). De acuerdo con los documentos de la API , debe pasar el token de autenticación como el parámetro de consulta apiKey o el encabezado X-Api-Key .
El indicador -G en curl lo convierte en una solicitud GET y pasa cualquier parámetro de datos ( -d ) a la cadena de consulta. Ahí es donde te equivocas.
Está realizando una solicitud POST a través de fetch() e intentando enviar las credenciales en el cuerpo de la solicitud. Eso no va a funcionar.
Intente esto en su lugar, haga una solicitud GET y pase las credenciales en el encabezado
fetch("https://quizapi.io/api/v1/questions", { headers: { "X-Api-Key": apiKey }, // the default method is "GET" }).then(res => { if (!res.ok) { throw new Error(res) } return res.json() }).then(console.log).catch(console.error) La alternativa es incluir apiKey en la cadena de consulta
const params = new URLSearchParams({ apiKey }) fetch(`https://quizapi.io/api/v1/questions?${params}`)