Foros del Web » Programando para Internet » PHP »

Enviar XML por POST a URL

Estas en el tema de Enviar XML por POST a URL en el foro de PHP en Foros del Web. Hola a todos, Necesito enviar un XML por POST a una URL determinada, pero me especifican que es obligatorio que tenga el Content-Type:application/x-www-form-urlencoded, bien, he ...
  #1 (permalink)  
Antiguo 17/12/2010, 08:53
Avatar de Thorin  
Fecha de Ingreso: enero-2007
Ubicación: UCI
Mensajes: 30
Antigüedad: 17 años, 2 meses
Puntos: 0
Enviar XML por POST a URL

Hola a todos,

Necesito enviar un XML por POST a una URL determinada, pero me especifican que es obligatorio que tenga el Content-Type:application/x-www-form-urlencoded,
bien, he probado con Nusoap, con Curl y con streams, pero no logro que funcione...aquí les dejo mis ejemplo a ver si por favor me sugieren alguna idea ! ya esto me tiene desesperado...

Con NuSoap


require_once('lib/nusoap.php');

$url = 'myurl';
$client = new nusoap_client('$url');
//$client->soap_defencoding = 'UTF-8';
// $client->setHeaders()
$err = $client->getError();

if ($err) {
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
}

$xml = '<?xml version="1.0" encoding="UTF-8"?>
<message>
<serviceRequest serviceCode="authentify">
<caller callerCode="123" password="123"/>
</serviceRequest>
</message>
';

$result = $client->send( $xml );
// $result = $client->call('message','','','',$xml);

if ($client->fault) {
echo '<h2>Fault</h2><pre>';
print_r( $result );
echo '</pre>';
} else {
$err = $client->getError();
if ($err) {
echo '<h2>Error</h2><pre>' . $err . '</pre>';
} else {
echo '<h2>Result</h2><pre>';
print_r($result);
echo '</pre>';
}
}

Con este ejemplo la respuesta es Response not of type text/xml (no content-type header)

Con CURL

$data = '<?xml version="1.0" encoding="UTF-8"?>
<message>
<serviceRequest serviceCode="authentify">
<caller callerCode="123" password="123"/>
</serviceRequest>
</message>';

$url = 'myurl';
$tuCurl = curl_init();
curl_setopt($tuCurl, CURLOPT_URL,$url);
curl_setopt($tuCurl, CURLOPT_PORT , 443);
curl_setopt($tuCurl, CURLOPT_VERBOSE, 0);
curl_setopt($tuCurl, CURLOPT_HEADER, 0);
curl_setopt($tuCurl, CURLOPT_SSLVERSION, 3);
curl_setopt($tuCurl, CURLOPT_POST, 1);
curl_setopt($tuCurl, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($tuCurl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($tuCurl, CURLOPT_POSTFIELDS, $data );
curl_setopt($tuCurl, CURLOPT_HTTPHEADER, array("Content-Type:application/x-www-form-urlencoded ","Content-length: ".strlen($data)));

$tuData = curl_exec($tuCurl);
if(!curl_errno($tuCurl)){
$info = curl_getinfo($tuCurl);
echo 'Took ' . $info['total_time'] . ' seconds to send a request to ' . $info['url'];
} else {
echo 'Curl error: ' . curl_error($tuCurl);
}

curl_close($tuCurl);
echo $tuData;

esto no funiona...

y por último streams

$xml = 'XML-REQUEST=<?xml version="1.0" encoding="UTF-8"?>
<message>
<serviceRequest serviceCode="authentify">
<caller callerCode="123" password="123"/>
</serviceRequest>
</message>';

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

$url = 'myurl';
$resp = file_get_contents($url, false, $context);
print_r( $resp );

Alguna sugerencia para mandar por POST el XML, como header application/x-www-form-urlencoded

Gracias de antemano.
Saludos

Última edición por Thorin; 17/12/2010 a las 09:01
  #2 (permalink)  
Antiguo 17/12/2010, 09:22
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 13 años, 4 meses
Puntos: 13
Respuesta: Enviar XML por POST a URL

Cita:
Con este ejemplo la respuesta es Response not of type text/xml (no content-type header)
Acá te dice que no tenes las cabeceras diciendo que es xml, así que sospecho que esta linea comentada no va:
Cita:
// $client->setHeaders()
Como no tengo conocimiento de nusoap no te puedo ayudar mucho, pero te sugiero que mires el tema de las cabeceras.

Cita:
esto no funiona...
Tal vez con un poco de información no vendría mal, y tratar de ver el porque tampoco, que tal si nos pones que salida envia?

Cita:
curl_setopt($tuCurl, CURLOPT_HEADER, 0);
Si mal no recuerdo eso deberia ser true.
  #3 (permalink)  
Antiguo 17/12/2010, 09:33
Avatar de Thorin  
Fecha de Ingreso: enero-2007
Ubicación: UCI
Mensajes: 30
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Enviar XML por POST a URL

esta es la respuesta con Nusoap:

HTTP/1.1 200 OK
Date: Fri, 17 Dec 2010 15:31:01 GMT
Transfer-Encoding: chunked
X-Powered-By: Servlet/2.5 JSP/2.1

<?xml version="1.0" encoding="UTF-8"?>

<message>
<serviceResponse returnCode="KO" errorCode="xrs.invalidrequest" />
</message>
  #4 (permalink)  
Antiguo 17/12/2010, 09:37
 
Fecha de Ingreso: diciembre-2010
Ubicación: Rosario, Santa Fe
Mensajes: 326
Antigüedad: 13 años, 4 meses
Puntos: 13
Respuesta: Enviar XML por POST a URL

umm... es agún servicio en especial? porque según esa respuesta es un error en la petición, lo cual también puede ser que el XML que mandas no sea correcto.
  #5 (permalink)  
Antiguo 17/12/2010, 09:49
Avatar de Thorin  
Fecha de Ingreso: enero-2007
Ubicación: UCI
Mensajes: 30
Antigüedad: 17 años, 2 meses
Puntos: 0
Respuesta: Enviar XML por POST a URL

[QUOTE=Thorin;3675250]esta es la respuesta con Nusoap:


returnCode deberia der OK, y devolver un id de session, xrs.invalidrequest, tambien significa que el xm no esta bien formado y si lo está, por ahi anda el asunto.
Saludos y gracias

Etiquetas: enviar, post, url, xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:55.