Admin/Dev

23
Juil.
2018

Envoyer des données JSON en POST avec PHP

Publié par sky

Dans le cadre de l'utilisation d'un webservice, on peut être amené à envoyer des données en POST depuis son site internet. Pour le format des données, JSON est très souvent la solution préconisée, pour son universalité et la taille réduite des données, face au format XML par exemple.

Voyons donc comment envoyer des données JSON, en POST avec PHP. JSON est un format de données structuré, il faut donc créer les données à envoyer.

Le plus simple est de créer une structure directement en PHP, puis de l'encoder en JSON, ainsi nous évitons tout risque d'erreur. Il faut évidemment renseigner les valeurs avec celles qu'attend le serveur. Par exemple, pour envoyer une requête de mise à jour du produit 7, qui se trouve être un film d'action en Blu-ray, nommé Mon Super Film et d'une longueur de 92 minutes.

$data = array(
    'action'        => 'put',
    'objectType'    => 'Produit',
    'objectId'      => 7,
    'objectData'    => array(
        'type'      => 'Film Blu-Ray',
        'title'     => 'Mon super film',
        'category'  => 'Action',
        'length'    => 92
    ),
);

Il faut ensuite créer les options de notre requête. En particulier, il faut indiquer que nous souhaitons du POST, et que le contenu sera du JSON :

$options = array(
    'http' => array(
        'method'  => 'POST',
        'header'  => "Content-Type: application/json",
    ),
);

Optionnellement, nous pouvons ajouter d'autres valeurs de contexte, telles qu'un délai d'expiration (en seconde), ou le fait d'ignorer les erreurs

$options = array(
    'http' => array(
        'method'  => 'POST',
        'header'  => "Content-Type: application/json",
        'ignore_errors' => true,
        'timeout' =>  10,
    ),
);

La liste complète des options de contexte se trouve sur cette page du manuel PHP.

Maintenant, il nous faut ajouter nos données que l'on va encoder.

$options = array(
    'http' => array(
        'method'  => 'POST',
        'header'  => "Content-Type: application/json",
        'ignore_errors' => true,
        'timeout' =>  10,
        'content' => json_encode($data),
    ),
);

Nous créons le contexte, avec la fonction PHP prévue à cet effet

$context  = stream_context_create($options);

Il ne reste plus qu'à envoyer la requête vers le webservice dédié, en indiquant son URL complète.

file_get_contents('https://url_complete_du_webservice', false, $context);

Voici le code au complet

/* Creation des donnees */
$data = array(
    'action'        => 'put',
    'objectType'    => 'Produit',
    'objectId'      => 7,
    'objectData'    => array(
        'type'      => 'Film Blu-Ray',
        'title'     => 'Mon super film',
        'category'  => 'Action',
        'length'    => 92
    ),
);

/* Creation des options de contexte */
$options = array(
    'http' => array(
        'method'  => 'POST',
        'header'  => "Content-Type: application/json",
        'ignore_errors' => true,
        'timeout' =>  10,
        'content' => json_encode($data),
    ),
);

/* Creation du contexte HTTP */
$context  = stream_context_create($options);

/* Execution de la requete */
file_get_contents('https://url_complete_du_webservice', false, $context);

Il ne reste plus qu'à voir, comment écrire le webservice qui réceptionne les données.

 
Sommaire de la série
 
 
Commentaires
Aucun commentaire pour le moment.

 

Poster un commentaire
En postant sur skymac.org, je m'engage à être courtois et à ce que mon message soit pertinent avec le sujet de l'article.
En outre, j'accepte, sans condition, que mon message soit refusé et supprimé si ces règles ne sont pas appliquées.
Ouvrir le panneau de gestion des cookies
Fermer le panneau
Ce site utilise des cookies pour assurer son bon fonctionnement. Il utilise aussi des cookies issues de services tiers permettant de proposer des fonctionnalités avancées. À tout moment, vous pouvez choisir quels services vous souhaitez activer ou refuser, afin de retirer votre consentement quant à l'utilisation des cookies.
 
Personnalisation des services
Vous êtes libre de choisir quels services vous souhaitez activer. En autorisant ces services tiers, vous acceptez le dépôt et la lecture de cookies et l'utilisation de technologies de suivi nécessaires à leur bon fonctionnement. En retirant votre consentement pour certains de ces services, certaines fonctionnalités du site peuvent ne plus fonctionner.
Navigation du site  En savoir plus
Le site écrit un cookie de session permettant son bon fonctionnement et aidant à la navigation. Il ne peut être désactivé.
Utilisation : 1 cookie, enregistre l'identifiant de la session.
Durée de vie : Le cookie est présent pendant toute la session sur le site. Il devient obsolète après 24 minutes d'inactivité.
Obligatoire
Popup Média
Afficher des vidéos depuis Yoube ou Dailymotion.
 
Tout accepter Tout refuser Gérer