Page 1 sur 1

Problème d'utilisation de cURL avec la méthode POST

Posté : 20 juin 2016, 16:08
par RedHad87
Bonjour,

J'ai utilisé cURL avec la méthode GET pour envoyer un fichier de configuration sous forme de fichier XML vers ma gateway de VoIP avec le code suivant:
<?php
// Url cible
$url="http://192.168.15.1/admin/resync?http//192.168.15.200/config.xml&xuser=admin&xpassword=admin";
// Le tableau associatif contenant les variables envoyées par POST au serveur
$options=array(
      CURLOPT_URL            => $url, // Url cible
      CURLOPT_RETURNTRANSFER => true, // Retourner le contenu téléchargé dans une chaine
      CURLOPT_HEADER         => false, // Ne pas inclure l'entête de réponse du serveur dans la chaine retournée
      CURLOPT_FAILONERROR    => true // Gestion des codes d'erreur HTTP supérieurs ou égaux à 400
);
// Création d'un nouvelle ressource cURL
$CURL=curl_init();
// Erreur suffisante pour justifier un die()
if(empty($CURL)){die("ERREUR curl_init : Il semble que cURL ne soit pas disponible.")}
      // Configuration des options de téléchargement
      curl_setopt_array($CURL,$options);
      // Exécution de la requête
      $content=curl_exec($CURL); // Le contenu téléchargé est enregistré dans la variable $content
      // Si il s'est produit une erreur lors du téléchargement
      if(curl_errno($CURL)){
            // Le message d'erreur correspondant est affiché
            echo "ERREUR curl_exec : ".curl_error($CURL);
      }
// Fermeture de la session cURL
curl_close($CURL);
?>
192.168.15.1 -> @ip de la gateway

192.168.15.200 -> @ip de mon serveur web

Le script fonctionne bien, mais je voudrai utiliser cURL avec la méthode POST en ajoutant les deux options "CURLOPT_POST" et "CURLOPT_POSTFIELDS " avec le code suivant:
<?php
// Url cible
$url="http://192.168.15.1/admin/resync?http//192.168.15.200/config.xml";
// Complétez le tableau associatif $postFields avec les variables qui seront envoyées par POST au serveur
$postFields=array(
      "xuser"     => "admin",  // La variable xuser contenant la valeur admin
      "xpassword" => "admin"  // La variable xpassword contenant la valeur admin
);
// Le tableau associatif contenant les variables envoyées par POST au serveur
$options=array(
      CURLOPT_URL            => $url, // Url cible
      CURLOPT_RETURNTRANSFER => true, // Retourner le contenu téléchargé dans une chaine
      CURLOPT_HEADER         => false, // Ne pas inclure l'entête de réponse du serveur dans la chaine retournée
      CURLOPT_FAILONERROR    => true, // Gestion des codes d'erreur HTTP supérieurs ou égaux à 400
      CURLOPT_POST           => true, // Effectuer une requête de type POST
      CURLOPT_POSTFIELDS     => $postFields // Le tableau associatif contenant les variables envoyées par POST au serveur
);
// Création d'un nouvelle ressource cURL
$CURL=curl_init();
// Erreur suffisante pour justifier un die()
if(empty($CURL)){die("ERREUR curl_init : Il semble que cURL ne soit pas disponible.")}
      // Configuration des options de téléchargement
      curl_setopt_array($CURL,$options);
      // Exécution de la requête
      $content=curl_exec($CURL); // Le contenu téléchargé est enregistré dans la variable $content
      // Si il s'est produit une erreur lors du téléchargement
      if(curl_errno($CURL)){
            // Le message d'erreur correspondant est affiché
            echo "ERREUR curl_exec : ".curl_error($CURL);
      }
// Fermeture de la session cURL
curl_close($CURL);
?>
Mais cela ne marche pas.

Merci.

Re: Problème d'utilisation de cURL avec la méthode POST

Posté : 20 juin 2016, 16:15
par @rthur
Bonjour,

Sans savoir précsiément ce que ton serveur cible attend ni comment il fonctionne, c'est difficile de savoir pour nous pourquoi il ne fait pas ce que tu lui demandes.

Mon conseil : installe wireshark sur ton serveur web et vérifie que la requête envoyée en POST est bien la même que celle attendue.
https://www.wireshark.org
Ça te permettra aussi de voir facilement quelle est la réponse du serveur.

Re: Problème d'utilisation de cURL avec la méthode POST

Posté : 20 juin 2016, 16:36
par RedHad87
Bonjour,

Merci pour votre réponse, je vais essayer cela dès que je rentre.

Par-contre, je voudrais savoir si la deuxième requête HTTP (http://192.168.15.200/config.xml) doit être dans URL ou bien avec les variable dans $postFields, car elle se situe entre le "?" et le "&", mais la variable doit avoir un nom et une valeur.

Merci.

Re: Problème d'utilisation de cURL avec la méthode POST

Posté : 20 juin 2016, 17:16
par @rthur
Aucune idée, ça dépend de ce que ton serveur en face attend...