Marzo 06, 2013
enzo
Como es sabido los formulario HTML pueden procesarse usando los método GET o POST de HTTP y en Drupal usando el Form API podemos definir que metodo deseamos usando la propiedad #method.
Como es obvio el procesamiento de los formulario requiere interacción de parte del usuario, cuando estamos integrando Drupal con sistemas de terceros en ocasión necesitamos hacer llamados POST o GET mediante código y en la mayoría de las veces esto requiere verificación de usuarios, afortunadamente podemos usar la función provista por del core de Drupal drupal_http_request.
A continuación se puede apreciar un ejemplo de un de un POST a un servicio externo el cual tiene HTTP Authentication y enviamos un XML al servicio externo.
$user = 'jorge';
$pass = 'perez';
$url = 'http://' . $user . ':' . $pass . '@api.example.com/create';
$data = '<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
</catalog';
//Se define el método a usar, los datos y los headers
$options = array(
'method' => 'POST',
'data' => $data,
'headers' => array('Content-Type' => 'text/xml; charset=UTF-8'),
);
$response = drupal_http_request($url, $options);
if($response->code == '200') {
drupal_set_message('Enviado creado satisfactoriamente');
} else {
watchdog('DEBUG','error code:' . $response->code );
watchdog('DEBUG','error message:' . $response->error );
drupal_set_message('Error enviando datos','error');
}
En el ejemplo anterior si deseáramos eliminar el envió de datos de verificación de usuarios, la URL quedara como sigue.
$url = 'http://api.example.com/create';
Además si en lugar de enviar un XML deseamos enviar datos normales de tipo formulario debemos cambiar la definición del arreglo $options donde cambiaremos el header, como se muestra a continuación.
$data = 'name=value&name1=value1';
$options = array(
'method' => 'POST',
'data' => $data,
'timeout' => 15,
'headers' => array('Content-Type' => 'application/x-www-form-urlencoded'),
);
En la parte final del código de ejemplo hacemos uso del objeto que retorna la función drupal_http_request para determinar si el envió se proceso correctamente o si fallo.
El objecto retornado por la función drupal_http_request cuenta con las siguiente propiedades.
- request: Cadena que contiene el cuerpo del request enviado.
- code: Número entro que contiene el estado de la respuesta o el código de error.
- protocol: El protocolo de respuesta por ejemplo HTTP/1.1 o HTTP/1.0.
- status_message: Mensaje del estado de la respuesta, en caso de que se haya recibido el envió.
- redirect_code: Si el request fue redirigido, contiene e número de estado del estado original antes de redireccionar.
- redirect_url: Si el request fue redirigido, contiene la URL hacia donde fue redirigido.
- error: Mensaje de error si ha ocurrido algún error.
- headers: Arreglo que contiene los headers enviados como respuesta.
- data: Cadena que contiene la respuesta del request.
Espero que haya sido de su agrado.
enzo