Buenas a todos
Llevo varios días intentando que un Drupal 7 acceda a la información de un webservice REST en Drupal 6.
Os cuento un poco cómo está el Drupal 6: tiene configurado el servidor REST con autenticacion por session. Solo el usuario admin puede acceder al único endpoint que tiene activada toda la infromación que nos permite services. Lógicamente, desde el navegador y logado como admin puedo acceder a toda la información.
Desde el Drupal 7, tengo montado el siguiente php tras mucho investigar y leer decenas de ejemplos y post que se contradicen unos con otros:
<?php
$base_url = 'URL_D6';
// Login
$data = array(
'username' => 'ADMIN',
'password' => 'EL_PASS_DE_ADMIN',
);
$data = http_build_query($data, '', '&');
$options = array(
'headers' => array(
'content-type' => 'text/xml',
),
'method' => 'POST',
'data' => $data
);
$login = drupal_http_request($base_url . '/user/login', $options);
// El login es OK?
if ($login->code == 200) {
// Guardamos la Cookie de autenticacion
$cookie = substr($login->headers['set-cookie'], 0, strpos($login->headers['set-cookie'], ';'));
$data = array();
$options = array(
'headers' => array(
'content-type' => 'text/xml',
'Cookie' => $cookie
),
'method' => 'GET',
'data' => http_build_query($data, '', '&')
);
$request = drupal_http_request($base_url . '/api/user/1', $options);
print_r($request);
}
?>Pida el dato que pida, siempre obtengo un error 401 y dice que no estoy autenticado: Unauthorized: Access denied for user 0 "anonymous"
Ya no se qué probar o dónde buscar más información. A ver si alguno os habéis encontrado en esta situación y me podéis indicar qué hago mal o qué leer
Muchas gracias
Comments
Promocionar a Spanish
Este post debería ser promocionado a Spanish para aumentar su visibilidad.
el 29 de diciembre veremos
el 29 de diciembre veremos como usar drupal_http_request en el ciball, pasate y charlarmos :)
Oskar
Posible solución
Hace unas semanas estuve peleando con lo mismo, a ver si te puedo ayudar.
Imagino que uno de los ejemplos que has visto es éste: http://drupal.org/node/910598. Fíjate en que $base_url apunte al endpoint completo, no solamente al raíz de Drupal. En tu caso sería URL_D6/api (en la segunda llamada tendrás que corregir el path).
El 'Access denied for user 0 "anonymous"' sale porque se llama al path 'user/login' en vez del path 'tu_endpoint/user/login' (no olvides habilitar este Resource en tu endpoint).
Dani.
Busca documentación sobre
Busca documentación sobre REST Services API en http://drupanium.org/api ahí encontrarás las rutas correctas.
Luis