2008-10-26 7 views
7

J'ai écrit une classe/fonction pour envoyer du XML sur https via PHP4/cURL, je me demandais juste si c'est la bonne approche, ou s'il y en a une meilleure.PHP4: Envoyer XML sur HTTPS/POST via cURL?

Notez que PHP5 n'est pas une option actuellement.

/** 
* Send XML via http(s) post 
* 
* curl --header "Content-Type: text/xml" --data "<?xml version="1.0"?>...." http://www.foo.com/ 
* 
*/ 
function sendXmlOverPost($url, $xml) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 

    // For xml, change the content-type. 
    curl_setopt ($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml")); 

    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); 

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // ask for results to be returned 
    if(CurlHelper::checkHttpsURL($url)) { 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    } 

    // Send to remote and return data to caller. 
    $result = curl_exec($ch); 
    curl_close($ch); 
    return $result; 
} 

cheers!

+0

Wow, pas une option à l'heure actuelle? Si vous n'êtes pas défini sur cURL, consultez HTTP_Request (http://pear.php.net/package/HTTP_Request). – Till

Répondre

-1

Utilisez la classe SoapClient fourni avec la plupart des installations PHP

Un exemple est:

$soap = new SoapClient("http://some.url/service/some.wsdl"); 
$args = array("someTypeName" => "someTypeValue" 
       "someOtherTypeName" => "someOtherTypeValue"); 

$response = $soap->executeSomeService($args); 

print_r($response); 
+0

Bravo, mais je ne pense pas que l'API XML que j'utilise utilise SOAP , lit juste une chaîne d'un poste. – starmonkey

4

Si le protocole que vous utilisez est XML-RPC (qui ressemble à ce basé sur ce que vous avez dit) et vous utilisent au moins PHP 4.2, jetez un oeil à http://phpxmlrpc.sourceforge.net/ pour les bibliothèques et les ressources.

3

$ ch = curl_init ($ serviceUrl);

if($this -> usingHTTPS()) 
    { 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, $this->sslVerifyHost); 

    } 

    curl_setopt($ch,CURLOPT_POST,TRUE); 
    curl_setopt($ch, CURLOPT_HEADER, FALSE);  
    curl_setopt ($ch, CURLOPT_POSTFIELDS, "OTA_request=".urlencode($this->xmlMessage)); 

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 

    $this->xmlResponse = curl_exec ($ch); 

    $this -> callerFactory -> dbgMsg('xmlResponse: <hr><pre>'.htmlentities($this->xmlResponse).'</pre><hr>'. curl_error($ch)); 
    curl_close ($ch); 

    $this->checkResponse(); 
4

Excellente solution! Trouvé un semblable ici aussi:

En outre, ils ont montré comment recevoir ce genre de XML/JSON sur le serveur

// here you can have all the required business checks 
if ($_SERVER['REQUEST_METHOD'] === 'POST'){ 
    $postText = file_get_contents('php://input'); 
}