web-dev-qa-db-ja.com

REST service(services module)でログインします

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

  • この例に従って service をテストしました。
  • サービスモジュールでセッション認証がアクティブ化されます。
  • これは、application/x-www-form-urlencoded、json、xml ...でアクティブ化されます。

[〜#〜]更新[〜#〜]

コードに複数の間違いがあるようです...私はこれのためにpost_data変数を置き換えました:

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

そして今、私はログイン要求を正しく送信します(200応答を受信します)が、今は応答メッセージを解析してcookie-sessionを取得しようとしますが、応答メッセージを受信しません。次のようなエラーが発生します。

* 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

新しいユーザーを作成して、私のエラーが管理者アカウントでの作業に関連しているかどうかを確認しようとしています。 REST経由で新しいユーザーを作成しようとしました(今はChromeのスクリプトpostmanを使用しています)...簡単です...しかし、そうではありませんでした(ユーザー名、名前、メール、メールをテストしました)...enter image description here

5
carlos.baez

最後に、問題を修正しました。 Services モジュールのバグでした。 7.x-3.5から7.x-3.7バージョンに更新し、@ sibiruチュートリアルを実行したところ、うまく機能し始めました。

0
carlos.baez

これは重要なビットです:

HTTP/1.1 401 Unauthorized:必要な引数名がありません

ペイロードをに変更するだけです

$post_data = array(
  'name' => 'admin',
  'password' => 'admin',
);
2
Clive

このスクリーンキャストを見てみてください、それは私を助けました

2
sibiru