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}
[〜#〜]更新[〜#〜]
コードに複数の間違いがあるようです...私はこれのために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を使用しています)...簡単です...しかし、そうではありませんでした(ユーザー名、名前、メール、メールをテストしました)...
最後に、問題を修正しました。 Services モジュールのバグでした。 7.x-3.5
から7.x-3.7
バージョンに更新し、@ sibiruチュートリアルを実行したところ、うまく機能し始めました。
これは重要なビットです:
HTTP/1.1 401 Unauthorized:必要な引数名がありません
ペイロードをに変更するだけです
$post_data = array(
'name' => 'admin',
'password' => 'admin',
);
このスクリーンキャストを見てみてください、それは私を助けました
Drupal 7チュートリアル-Webサービス:基本パート1
また、X-CSRF-Tokenの問題も確認してください