Envoi d’en-têtes d’autorisation avec WordPress
Chaque fois que nous ferons des requêtes à distance avec WordPress, nous utiliserons probablement l’une des fonctions suivantes :
Et, oui, nous utiliserons parfois cURL en fonction de la nature du projet, mais cela ne fait pas partie du contenu de cet article.
Pour cet article, je veux parler spécifiquement de la création de requêtes à distance et de la spécification d’en-têtes par rapport à une API tierce.
En-têtes d’autorisation avec WordPress
Chaque fois qu’il s’agit de faire des requêtes asynchrones avec WordPress, le processus se déroule souvent comme suit :
- Configurez la fonction JavaScript pour effectuer un appel côté serveur (avec un nonce sécurisé, bien sûr),
- Demandez au côté serveur d’effectuer la requête en utilisant l’une des fonctions susmentionnées,
- Renvoyez la réponse sous la forme d’un message de réussite ou d’erreur ,
- Demandez au JavaScript côté client de gérer la réponse de la manière qui semble appropriée en fonction de la réponse.
Mais que se passe-t-il si la demande d’API que vous devez effectuer depuis le serveur nécessite quelque chose de plus qu’un point de terminaison de base avec quelques paramètres ?
Plus précisément, que se passe-t-il si ce que vous écrivez nécessite que vous fournissiez un certain type d’autorisation pour votre travail ? Heureusement, WordPress nous permet de définir des en-têtes qui résolvent exactement cela.
Si vous voulez implémenter quelque chose comme ça, alors je vais supposer que le type de contenu sera celui de JSON et que l’autorisation sera un type de jeton (cependant, votre implémentation peut varier en fonction du système avec lequel vous êtes travail).
Dans ce cas, mon jeton sera simplement identifié comme $token. Et voici un exemple simple :
<?php
$response = wp_safe_remote_post(
$url,
[
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => $token
],
'body' => wp_json_encode($args),
'method' => 'POST',
'data_format' => 'body',
]
);
Quelque chose à noter
Si votre hébergeur s’exécute sur Apache et que ce type de requête ne fonctionne pas, vous devrez probablement mettre à jour votre htaccessfichier afin qu’il inclue la règle suivante : SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1.
Bravo à George pour m’avoir accroché avec ça.
