2010-12-02 23 views
6

Estoy tratando de enviar una solicitud de POST HTTPS con datos XML a un servidor usando PHP.PHP https publicar datos XML con cURL

Cualquier cosa que envíe al servidor requiere autenticación, por lo tanto, usaré cURL.

Información básica: los datos XML son para solicitar al servidor que cargue un archivo desde una URL específica a su almacenamiento local.

Una regla para usar esta API es DEBO establecer el tipo de contenido para cada solicitud en application/xml.

Esto es lo que he hecho, pero no está funcionando ...

<?php 
$fields = array(
'data'=>'<n1:asset xmlns:n1="http://.....com/"><title>AAAA</title><fileName>http://192.168.11.30:8080/xxx.html</fileName><description>AAAA_desc</description><fileType>HTML</fileType></n1:asset>' 
); 
$fields_string = ""; 
foreach($fields as $key=>$value) { 
$fields_string .= $key.'='.$value.'&'; 
} 
rtrim($fields_string,'&'); 

$url = "https://192.168.11.41:8443/"; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, count($fields)); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 

curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERPWD, "admin:12345678"); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/xml', 'Content-length: '. strlen($fields_string))); 

$result = curl_exec($ch); 

curl_close($ch); 

echo $result; 
?> 

Me esperan obtener una respuesta XML de cualquiera de cargar con éxito o cargar fallado. Pero en su lugar recibo este mensaje de error.

HTTP/1.1 415 no compatible Tipo de soporte Servidor: Apache-Coyote/1.1 Content-Type: text/xml; charset = UTF-8 Content-Length: 0 Fecha: Jue, 02 de Dic 2010 03 : 02: 33 GMT

Estoy seguro de que el tipo de archivo es correcto, el formato XML es el correcto. He intentado urlencode los campos pero no funcionó. ¿Qué más podría haber hecho mal?

Respuesta

0

¿Quizás podrías probar text/xml en lugar de application/xml?

+0

intentó, no funcionaba ni – EDDIU

0

que tiene que hacer, en que código original:

curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields['data']); 

o

curl_setopt($ch, CURLOPT_POSTFIELDS, '<n1:asset xmlns:n1="http://.....com/"><title>AAAA</title><fileName>http://192.168.11.30:8080/xxx.html</fileName><description>AAAA_desc</description><fileType>HTML</fileType></n1:asset>'); 

quiero decir que usted tiene que enviar el código XML directamente.

+0

acaba de intentar eso, que no funcionó. Respondió con el mismo mensaje de error. – EDDIU

3

que resolver con

$xml = $this->getXml(); 
$url = $this->getUrl(); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
             'Content-type: application/xml', 
             'Content-length: ' . strlen($xml) 
            )); 
$output = curl_exec($ch); 
curl_close($ch); 
+0

Cuál es la diferencia entre curl_setopt ($ ch, CURLOPT_POST, 1); y curl_setopt ($ ch, CURLOPT_POST, verdadero); ¿Qué le dice eso a CURL exactamente? – TimNguyenBSM