Pourquoi devriez-vous connaître l’API HTTP de WordPress ? Certains d’entre vous auront envie d’installer WordPress avec l’extension cURL par exemple, d’autres non. Certaines installations vous autorisent à utiliser la fonction file_get_contents
sur des URL externes, sur d’autres cette fonctionnalité est désactivée. Si vous comptez sur ces fonctionnalités, votre plugin peut ne pas fonctionner pour beaucoup d’utilisateurs. C’est là que l’API HTTP WordPress entre en jeu. Il vous permet d’effectuer des requêtes GET
ou POST
sur d’autres sites.
L’API HTTP a été aussi une tentative de standardiser sur une seule API pour que tout soit le plus simple possible. L’API HTTP a été ajouté dans WordPress 2.7 et étendu dans WordPress 2.8. Si vous voulez maintenir la compatibilité ascendante avec les versions précédentes, vous devriez envelopper les appels de fonction de function_exists()
et fournir une alternative, si possible.
L’API HTTP WordPress permet de rechercher, publier sur des serveurs distants, tel un jeu d’enfant. Pour cela, il vous permet d’ignorer la méthode de transport lorsque vous chercher ou poster quelque chose. L’API HTTP choisi la méthode la plus rapide et la plus fiable parmi les cinq types de transports disponibles en PHP.
Les deux fonctions les plus importantes et celles que vous utiliserez probablement 99% du temps sont :
wp_remote_get()
wp_remote_post()
Note : Les fonctions ci-dessus vont récupérer une URL. Sachez que ces fonctions renvoient une erreur WordPress de la classe WP_Error
en cas d’échec.
wp_remote_get()
Comme Codex l’explique, il s’agit d’une fonction de l’API HTTP WordPress qui vous permet de récupérer le contenu d’une page Web. Non seulement vous obtenez le contenu de la page Web, mais vous pouvez également obtenir des informations d’en-tête HTTP et les codes de réponse. Cette fonction est également capable de récupérer le contenu des flux qui la rend aussi utile si vous souhaitez créer un plugin Twitter ou un lecteur de flux RSS avec WordPress.
Dans la plupart des cas, vous aurez seulement besoin de le faire :
$resp = wp_remote_get( https://www.blog-nouvelles-technologies.fr’ );
[/sourcecode]
Le corps de la page que vous avez demandé sera accessible via $resp['body']
. Je vous conseille de vérifier le code que la réponse ($resp['body']['response']
) est bien 200, indiquant que la requête a correctement été accomplie. Pour cela, vous pouvez faire comme ceci :
if ( 200 == $resp[‘response’][‘code’] ) {
$body = $resp[‘body’];
// effectuer une action avec le contenu
}
[/sourcecode]
Il y a aussi une fonction qui peut le faire pour vous, même si je n’aime pas vraiment la façon dont elle traite l’information. Cette fonction est appelée wp_remote_retrieve_body
, qui prend comme seul paramètre la réponse HTTP. Son code est le suivant :
function wp_remote_retrieve_body( &$response ) {
if ( is_wp_error($response) || ! isset($response[‘body’]) )
return »;
return $response[‘body’];
}
[/sourcecode]
Vous pouvez l’utiliser de la manière suivante :
$body = wp_remote_retrieve_body( wp_remote_get( ‘https://www.blog-nouvelles-technologies.fr’ ) );
[/sourcecode]
Si votre requête n’aboutissait pas, la variable $body
serait alors vide. Je vous propose donc de vérifier celle-ci. Notez que si le code de réponse était 404, la variable body
peut contenir la page 404…
wp_remote_post()
Si vous souhaitez publier des données à une URL distante en utilisant l’API HTTP WordPress, procédez comme suit :
$args = array(
‘body’ => ‘Ce que vous voulez ici !’
);
$resp = wp_remote_post( ‘https://www.blog-nouvelles-technologies.fr’, $args );
[/sourcecode]
Pour plus d’informations, vous pouvez lire la documentation ici.
Vous pouvez ensuite traiter la variable $resp
de la même manière qu’avec la méthode wp_remote_get
. Les deux fonctions sont des alias de la fonction wp_remote_request
de la classe WP_Http
. Elle spécifie juste la méthode employée (GET
ou POST
).
Avez-vous déjà testé cet API ? Quel en est votre sentiment ?