Cyril Rabat


Requête HTTP depuis un script PHP

 09/11/2016     14/11/2016      Programmation PHP      Programmation client/serveur      Communications HTTP   

Comment envoyer une requête HTTP depuis un script PHP

   Cet article explique comment il est possible de forger une requête HTTP depuis un script PHP en envoyant des données en POST.

Mots-clefs :   HTTP     PHP     JSON   

Archive de tous les fichiers correspond à cet article :

 http.zip

Le script appelant

Le script suivant permet d'envoyer une requête HTTP à un autre script PHP qui est présenté ci-dessous. La requête contient des données en POST, au format JSON. Le document JSON contient deux attributs : le login et le mot de passe. Les données sont spécifiées en dur dans le code. Le script analyse ensuite la réponse qui est aussi au format JSON. Par défaut, un message doit indiquer que la connexion a réussi.

<html lang="fr">
    <head>
        <title>Test d'envoi d'une requête HTTP depuis un script PHP</title>
        <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
        <meta name="description" content="Requête HTTP en PHP"/>
        <meta name="author" content="Cyril Rabat"/>
    </head>
    <body>
        <h1>Exemple d'envoi d'une requête HTTP vers un autre script PHP</h1>
 
        <p>Le script actuel appelle le script <i>generateur.php</i> en lui envoyant des données en JSON.</p>
 
<?php
    // Création des données : un tableau associatif
    $tableau = array("login" => "toto", "motDePasse" => "toto");
 
    // Préparation des données pour la requête
    $donnees = http_build_query(
            array(
                'donnees' => json_encode($tableau)
            )
        );
 
    // Préparation de la requête
    $options = array('http' =>
            array(
                'method'  => 'POST',
                'header'  => 'Content-type: application/x-www-form-urlencoded',
                'content' => $donnees
            )
        );
 
    // Envoi de la requête et lecture du JSON reçu
    $contexte  = stream_context_create($options);
    $jsonTexte = file_get_contents('http://localhost/http/generateur.php', false, $contexte);
 
    // Analyse du JSON reçu
    $tableau = json_decode($jsonTexte, true);
    if($tableau['code'] == "OK")
        echo "<p>Bravo !!! Vous êtes connecté !!!</p>";
    else {
        echo "<p>Erreur de connexion ! L'erreur est <b>".$tableau['message']."</b></p>";
    }
?>        
    </body>
</html>

 Télécharger le fichier

Le script appelé

Le script suivant se contente de récupérer les données envoyées en POST au format JSON. Normalement, une variable donnees doit contenir un document JSON contenant lui-même un attribut login et un attribut motDePasse. Ici, le script vérifie que login vaut "toto" et le mot de passe "toto". La réponse est au format JSON.

<?php
header("Content-type : application/json");
 
if(isset($_POST['donnees'])) {
    $tableauRecu = json_decode($_POST['donnees'], true);
 
    if(isset($tableauRecu['login']) && isset($tableauRecu['motDePasse'])) {
        if(($tableauRecu['login'] == "toto") && ($tableauRecu['motDePasse'] == "toto")) {
            $tableau = array("code" => "OK", "message" => "login correct");
        }
        else {
            $tableau = array("code" => "erreur", "message" => "login incorrect");
        }
    }
    else {
        $tableau = array("code" => "erreur", "message" => "données manquantes.");
    }
}
else {
    $tableau = array("code" => "erreur", "message" => "pas de données en POST.");
}
 
echo json_encode($tableau);
?>

 Télécharger le fichier

Exécution

Pour exécuter les différents codes, il faut utiliser un serveur Web (par exemple UWamp, sous Windows). Les fichiers doivent être placés dans le répertoire www : on suppose ici qu'ils seront placés dans un sous-répertoire http. Une fois le serveur exécuté, on accède à la page  http://localhost/http/.

Pour vérifier les différentes conditions, vous pouvez modifier le login et le mot de passe dans le script appelant, supprimer le login, supprimer les données dans la requête...


Version de cette page Mercredi 16 Décembre 2015

© Cyril Rabat 2016

Connexion

Mot de passe perdu

Dernières nouvelles

Aucune pour le moment

Contact

Courriel :
cyril.rabat [at] univ-reims.fr

Téléphone :
+33-326-91-33-81

Fax :
+33-326-91-33-97

Facebook :
lien Facebook direct