web-dev-qa-db-fra.com

Envoi de données XML à l'aide de HTTP POST with PHP

J'ai besoin d'envoyer ce XML

      <?xml version="1.0" encoding="UTF-8"?>
<gate>
   <country>NO</country>
   <accessNumber>1900</accessNumber>
   <senderNumber>1900</senderNumber>
   <targetNumber>4792267523</targetNumber>
   <price>0</price>
   <sms>
      <content><![CDATA[This is a test æøå ÆØÅ]]></content>
   </sms>
</gate>

à un service de passerelle SMS. Le service écoute les demandes HTTP POST. Le XML doit être intégré dans le BODY de la demande POST.

J'utilise PHP et le framework CodeIgniter, mais je suis au total PHP n00b, donc idéalement, j'aurais besoin d'un guide complet, mais tout pointeur dans la bonne direction serait apprécié.

21
Frode

vous pouvez utiliser la bibliothèque cURL pour publier des données: http://www.php.net/curl

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_URL, "http://websiteURL");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "XML=".$xmlcontent."&password=".$password."&etc=etc");
$content=curl_exec($ch);

où postfield contient du XML que vous devez envoyer - vous devrez nommer le postfield que le service API (Clickatell je suppose) attend

32
dusoft

Une autre option serait file_get_contents():

// $xml_str = your xml
// $url = target url

$post_data = array('xml' => $xml_str);
$stream_options = array(
    'http' => array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded' . "\r\n",
        'content' =>  http_build_query($post_data)));

$context  = stream_context_create($stream_options);
$response = file_get_contents($url, null, $context);
23
GZipp