PHP スタック上にある REST API で認証を機能させるのに問題があります。ブラウザでログインできるようにするクエリ文字列は、次のようになりますhttp://foo.com/gamer/index.php?module=Login&action=myLogin ... RestKit で利用可能なすべてのドキュメントに従い、次のコードを思いつきました、NSLogConfigure を有効にすることに加えて、その出力はコードに従います。コード
- (void)sendHTTPAuthRequestWithParams {
NSMutableDictionary* authParams = [[NSMutableDictionary alloc] init];
NSMutableDictionary* moreParams = [[NSMutableDictionary alloc] init];
//user and password params
[authParams setObject:usernameTextField.text forKey:@"login"];
[authParams setObject:passwordTextField.text forKey:@"password"];
//more parameters for rest login api
[moreParams setObject:@"Login" forKey:@"module"];
[moreParams setObject:@"mylogin" forKey:@"action"];
[moreParams setObject:authParams forKey:@"params"];
//parsing
id<RKParser> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:RKMIMETypeJSON];
NSError *error = nil;
NSString *json = [parser stringFromObject:moreParams error:&error];
[RKClient sharedClient].authenticationType = RKRequestAuthenticationTypeHTTP;
//if no error
if(!error) {
RKLogConfigureByName("RestKit/Network", RKLogLevelTrace);
[[RKClient sharedClient] post:@"/index.php?" params:[RKRequestSerialization serializationWithData:[json dataUsingEncoding:NSUTF8StringEncoding] MIMEType:RKMIMETypeJSON] delegate:self];
RKLogConfigureByName("RestKit/Network", RKLogLevelTrace);
}
//[[RKClient sharedClient] post:@"/index.php?module=Login&action=mylogin" params:authParams delegate:self]; }
RKLogConfigureByName() 出力
2012-05-24 19:59:09.513 GiantsGamer[57045:207] D restkit.network:RKRequest.m:435 Sending asynchronous POST request to URL http://www.foo.com/gamer/index.php.
2012-05-24 19:59:09.514 GiantsGamer[57045:207] T restkit.network:RKRequest.m:381 Prepared POST URLRequest '<NSMutableURLRequest http://localhost/gamer/index.php>'. HTTP Headers: {
"Content-Length" = 85; "Content-Type" = "application/json";}. HTTP Body: {"module":"Login","action":"mylogin","params":{"login":"admin","password":"admin"}}. 2012-05-24 19:59:09.736 GiantsGamer[57045:207] D restkit.network:RKResponse.m:195 NSHTTPURLResponse Status Code: 200 2012-05-24 19:59:09.737 GiantsGamer[57045:207] D restkit.network:RKResponse.m:196 Headers: {"Cache-Control" = "no-store, must-revalidate";
Connection = "Keep-Alive";
"Content-Length" = 2745;
"Content-Type" = "text/html; charset=utf-8";
Date = "Fri, 25 May 2012 02:59:09 GMT";
Expires = "";
"Keep-Alive" = "timeout=5, max=100";
Pragma = "";
Server = "Apache/2.2.21 (Unix) mod_ssl/2.2.21 OpenSSL/0.9.8r DAV/2 PHP/5.3.8";
"Set-Cookie" = "PIWIK_SESSID=a065dba239819175689b1e2a23021d01; path=/; HttpOnly";
"X-Frame-Options" = sameorigin;
"X-Powered-By" = "PHP/5.3.8";
}
2012-05-24 19:59:09.737 GiantsGamer[57045:207] T restkit.network:RKResponse.m:203 Read response body: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
<head>…
</head>
<body>...
</body>
</html>
ログからわかるように、クエリ文字列 (認証パラメーター) は HTTP ボディに含まれています。それでいいですか?また、http 応答ステータス コード 200 (OK) を取得しますが、index.html の Web ページによって生成された HTML コード全体が表示されます。どこが間違っているのかわかりませんか?RestKit 応答を解読するにはどうすればよいですか?