Войдите в систему с помощью службы REST (модуль услуг)


Я работаю с Drupal 7 (сервисы 3.x) для реализации службы REST. Когда я тестирую запрос на вход с помощью этого скрипта:

$service_url = 'https://dev.mysite.org/api/blog/user/login.xml'; // .xml asks for xml data in response
$post_data = array(
  'username' => 'admin',
    'password' => 'admin',
    );
$post_data = http_build_query($post_data, '', '&'); // Format post data as application/x-www-form-urlencoded
// set up the request
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  // have curl_exec return a string
curl_setopt($curl, CURLOPT_POST, true);             // do a POST
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); // POST this data
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
// make the request
curl_setopt($curl, CURLOPT_VERBOSE, true); // output to command line
$response = curl_exec($curl);
curl_close($curl);
print "RESPONSE:\n";
var_dump($response);
// parse the response
$xml = new SimpleXMLElement($response);
$session_cookie = $xml->session_name .'='. $xml->sessid;
print "SESSION_COOKIE: $session_cookie";
file_put_contents('session_cookie.txt', $session_cookie);

Я получаю эту ошибку:

* upload completely sent off: 29 out of 29 bytes
< HTTP/1.1 401 Unauthorized: Missing required argument name
< Date: Sun, 09 Feb 2014 02:39:45 GMT
* Server Apache/2.2.22 (Ubuntu) is not blacklisted
< Server: Apache/2.2.22 (Ubuntu)
< X-Powered-By: PHP/5.3.10-1ubuntu3.9
< Expires: Sun, 19 Nov 1978 05:00:00 GMT
< Last-Modified: Sun, 09 Feb 2014 02:39:45 +0000
< Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
< ETag: "1391913585"
< Set-Cookie: DRUPAL_UID=-1; expires=Tue, 04-Mar-2014 06:13:05 GMT; path=/; domain=.dev.labdoo.org; secure
< Vary: Accept-Encoding
< Content-Length: 0
< Content-Type: text/html
< 
* Connection #0 to host dev.mysite.org left intact
RESPONSE:
string(0) ""
PHP Fatal error:  Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /home/myuser/Desktop/test.php:23
Stack trace:
#0 /home/myuser/Desktop/test.php(23): SimpleXMLElement->__construct('')
#1 {main}
  • Моя конфигурация службы REST такова:

enter image description here

enter image description here

enter image description here

  • Я последовал этому примеру, чтобы протестировать службу .
  • Активируется аутентификация сеанса в модуле Сервисов.
  • Он активирован приложение/x-www-форма-url-кодированный, json, xml....

ОБНОВЛЕНИЕ

Похоже, что в коде есть несколько ошибок.... Я заменил свою переменную post_data для этого:

$post_data = array(
  'name' => 'admin',
  'pass' => 'admin',
);

И теперь я правильно отправляю запрос на вход (я получаю ответ 200), но теперь, когда я пытаюсь проанализировать ответное сообщение, чтобы получить сеанс cookie, я не получаю никакого ответного сообщения. Я получаю такую ошибку:

* upload completely sent off: 21 out of 21 bytes
< HTTP/1.1 200 OK
< Date: Wed, 12 Feb 2014 21:35:36 GMT
* Server Apache/2.2.22 (Ubuntu) is not blacklisted
< Server: Apache/2.2.22 (Ubuntu)
< X-Powered-By: PHP/5.3.10-1ubuntu3.9
< Expires: Sun, 19 Nov 1978 05:00:00 GMT
< Last-Modified: Wed, 12 Feb 2014 21:35:36 +0000
< Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0
< ETag: "1392240936"
< Set-Cookie: DRUPAL_UID=-1; expires=Sat, 08-Mar-2014 01:08:56 GMT; path=/; domain=.dev.mysite.org; secure
< Content-Length: 1316
< Content-Type: application/xml
< 
* Connection #0 to host dev.mysite.org left intact
RESPONSE:
string(1316) "
Fatal error: Unsupported operand types in /var/www/lbd/profiles/labdoo/modules/contrib/services/includes/services.runtime.inc on line 417

Call Stack:
    0.0000     334912   1. {main}() /var/www/lbd/index.php:0
    0.0347    4175712   2. menu_execute_active_handler() /var/www/lbd/index.php:21
    0.0348    4176376   3. call_user_func_array() /var/www/lbd/includes/menu.inc:517
    0.0348    4176756   4. services_endpoint_callback() /var/www/lbd/includes/menu.inc:517
    0.0366    4343036   5. call_user_func() /var/www/lbd/profiles/labdoo/modules/contrib/services/services.module:218
    0.0366    4343036   6. rest_server_server() /var/www/lbd/profiles/labdoo/modules/contrib/services/services.module:218
    0.0385    4449312   7. RESTServer->handle() /var/www/lbd/profiles/labdoo/modules/contrib/services/servers/rest_server/rest_server.module:39
    0.0432    4532668   8. services_controller_execute() /var/www/lbd/profiles/labdoo/modules/contrib/services/servers/rest_server/includes/RESTServer.inc:46
    0.0436    4534132   9. _services_controller_execute_internals() /var/www/lbd/profiles/labdoo/modules/contrib/services/includes/services.runtime.inc:106
    0.0436    4534176  10. _services_authenticate_user() /var/www/lbd/profiles/labdoo/modules/contrib/services/includes/services.runtime.inc:162

ОБНОВЛЕНИЕ 2

Я пытаюсь создать новый пользователь, чтобы проверить, связана ли моя ошибка с работой с учетной записью администратора. Я попытался (теперь с помощью скрипта postman для Chrome) создать нового пользователя через REST... Это было бы легко... но я не был (я проверил имя пользователя, имя, адрес электронной почты, почту)...enter image description here

Author: carlos.baez, 2014-02-11

3 answers

Это важный бит:

HTTP/1.1 401 Несанкционированный: Отсутствует требуемое имя аргумента

Просто измените свою полезную нагрузку на

$post_data = array(
  'name' => 'admin',
  'password' => 'admin',
);
 2
Author: Clive, 2014-02-11 22:22:11

Попробуйте посмотреть этот скринкаст, он мне помог

 2
Author: sibiru, 2014-02-12 05:40:37

Наконец, я устранил проблему. Это была ошибка в модуле Службы. Я обновился с версии 7.x-3.5 до версии 7.x-3.7, я следовал учебнику @sibiru, и он начал хорошо работать.

 0
Author: carlos.baez, 2015-10-13 08:11:05