J’ai réussi à obtenir du contenu JSON en utilisant jQuery.ajax()
. Actuellement, il récupère le contenu d’un autre hôte contenant un seul fichier index.php et renvoyant une réponse 401 avec le corps suivant: {'status':401}
.
C’est le JS:
$(document).ready(function() { $.ajax({ url: 'http://restapi', type: 'GET', dataType: 'json', success: function() { document.write('works'); }, error: function(xhr) { document.write('failed, status:' + xhr.status); }, beforeSend: setHeader }); }); function setHeader(xhr) { xhr.setRequestHeader('Authorization', 'Bearer 12345'); }
Et le PHP:
401]); exit;
Si je supprime l’en-tête, xhr.setRequestHeader('Authorization', 'Bearer 12345');
, tout fonctionne bien (la réponse a un corps json et xhr.status
renvoie 401
). Mais avec l’en-tête Authorization, le corps ne renvoie rien et xhr.status
renvoie 0
.
Je dois envoyer le jeton d’authentification dans cet en-tête.
J’ai fait la même chose avec Node.js et j’ai remarqué qu’il envoyait deux requêtes / réponses. Un avec un en-tête 204 et un autre avec le 401 prévu et le corps json. La première méthode était OPTIONS et la deuxième méthode était GET, alors je l’ai essayé avec ceci:
if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { header("HTTP/1.1 204 No Content"); } else { header("HTTP/1.1 401 Unauthorized"); echo json_encode(['status' => 401]); }
Fonctionne bien.