2009-11-02 16 views
18

que necesitan enviar este XMLEnvío de datos XML utilizando HTTP POST con PHP

 <?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> 

a un servicio de pasarela SMS. El servicio escucha las solicitudes HTTP POST. El XML debe estar incrustado en el CUERPO de la solicitud POST.

Estoy usando PHP y el framework CodeIgniter, pero soy un PHP n00b total, por lo que idealmente necesitaría una guía completa, pero cualquier puntero en la dirección correcta sería apreciado.

Respuesta

31

puede usar la biblioteca cURL para la publicación de los datos: 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); 

donde postfield contiene XML necesita enviar - tendrá que nombrar el postfield el servicio API (Clickatell supongo) espera

+0

Sí, deseo ... me invitó a salir IT-chico si podía instalar cURL, pero no wa No hay posibilidad de que pueda hacerlo dentro de un tiempo razonable. – Frode

+4

luego, vea esta publicación en el blog: http://netevil.org/blog/2006/nov/http-post-from-php-without-curl – dusoft

+0

También existe la poderosa y muy buena extensión pecl_http y varias PEAR HTTP_ * paquetes (más fácil para su técnico de TI para instalar). – GZipp

22

Otra opción sería 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); 
+0

Sí, las transmisiones se han introducido en PHP 4.3, pero están bastante ocultas para la mayoría de los usuarios. – dusoft

+0

Recibo un error: {Advertencia: file_get_contents (http://www.nwmls.com/Schemas/General/EverNetQueryXML.xsd) [function.file-get-contents]: error al abrir la secuencia: ¡Falló la solicitud HTTP! HTTP/1.1 404 No se encuentra en /home/phretscl/public_html/xml/pulldata.php en la línea 42} – Neocortex

+0

Espera no es la pregunta "¿Cómo envío XML?" En lugar de "¿Cómo recibo XML y luego lo leo? "¿?" – ChristoKiwi