2012-09-09 16 views
1

我已經有兩天的時間尋找RestKit API的簡單代碼來登錄到一個網站而不使用JSON。下面是我寫到目前爲止代碼:簡單的RestKit登錄而不使用JSON

- (void)login 
{ 
    [RKClient clientWithBaseURLString:@"http://Mywebsite.com/login.php"]; 
    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObject:@"user" forKey:@"username"]; 
    [params setObject:@"pass" forKey:@"password"]; 
    [params setObject:@"login" forKey:@"type"]; 
    [[RKClient sharedClient] post:@"/login" params:params delegate:self]; 

} 

- (void)request:(RKRequest*)request didLoadResponse:(RKResponse*)response 
{ 
    NSLog(@"HTTP status code:  %d", response.statusCode); 
    NSLog(@"HTTP status message: %@", [response localizedStatusCodeString]); 
} 

- (void)objectLoader:(RKObjectLoader*)objectLoader didFailWithError:(NSError*)error { 
    NSRange range = [[error localizedDescription] rangeOfString:@"-1012"]; 
    if (range.length > 0){ 
     //Do whatever here to handle authentication failures 
    } 
    RKLogError(@"Hit error: %@", error); 
} 

這裏是我收到的日誌:

2012-09-08 21:44:14.633 RestKitTest[889:fb03] I restkit:RKLog.m:33 RestKit initialized... 
2012-09-08 21:44:15.010 RestKitTest[889:fb03] I restkit.network.reachability:RKReachabilityObserver.m:369 Network availability has been determined for reachability observer <RKReachabilityObserver: 0x6c5a560 host=0.0.0.0 isReachabilityDetermined=YES isMonitoringLocalWiFi=NO reachabilityFlags=-R -----l-> 
2012-09-08 21:44:21.021 RestKitTest[889:fb03] I restkit.network:RKRequest.m:676 Status Code: 404 
2012-09-08 21:44:21.036 RestKitTest[889:fb03] HTTP status code:  404 
2012-09-08 21:44:21.090 RestKitTest[889:fb03] HTTP status message: not found 

任何想法,我怎麼能解決這個問題,將不勝感激。

+0

@hlfcoding你有什麼想法如何解決這個問題? – Hamid

+0

爲什麼你不想使用JSON? –

+0

因爲您將'baseURL'設爲'http:// Mywebsite.com/login.php',但是您以'post:@「/ login」'的形式發佈,所以我會說它是'404's。你真的想訪問'http:// Mywebsite.com/login.php/login'嗎? – mja

回答

2

我會說這404因爲你設置baseURLhttp://Mywebsite.com/login.php但你的崗位作爲post:@"/login"。你真的想訪問http://Mywebsite.com/login.php/login嗎?

baseURL應該設置爲所有後端調用的通用前綴,在您的案例http://Mywebsite.com中,資源本身應發佈爲post:@"/login.php"。資源名稱和baseURL在請求發送之前連接在一起。

+0

謝謝@mja,我的最後一個問題,如果我想讓這個用戶名和密碼持久化使用其他Web服務,我應該怎麼做?因爲現在它會登錄,但是當我想以某個用戶的身份發佈某個東西時,它會給我這個你沒有登錄的錯誤。我通過編寫下面這行代碼解決了這個問題:'[loginRequest setUseKeychainPersistence: YES];'但我不知道RestKit是否具有相同的代碼來創建用戶並傳遞持久性。 – Hamid

+0

您是否嘗試將用戶名和密碼設置到您的'RKClient'實例'[[RKClient sharedClient] setUsername:@「user」]'; – mja

+0

我在我的登錄方法'[[RKClient sharedClient] post:@「/ login」params:params delegate:self];中設置了用戶名和密碼。 '但它仍然給我這個錯誤,我沒有登錄。 – Hamid

0

您需要提供有關login.php正在做什麼的信息。我不明白爲什麼它應該404如果腳本url解析正確。另外,如果PHP腳本在成功時做了重定向,則應該使用RKClient方法post:usingBlock:,並在該塊內部執行request.followRedirect = NO;。這樣你會得到正確的狀態碼,如果你正在返回一個。

如果還可以幫助記錄更多的響應:

NSLog(@"Header fields: %@", response.allHeaderFields); 
NSLog(@"Body: %@", response.bodyAsString); 
+0

如果用戶輸入正確的用戶名和密碼,login.php會將他/她引導到主頁,但是如果用戶輸入錯誤的用戶通過它將停留在登錄頁面上,所以我必須在輸入用戶後解析xml代碼並通過以查看它是否在主頁上或者它仍然在登錄頁面上。 – Hamid

+0

我添加了兩個NSLog,你建議,這裏是我收到的響應:'2012-09-09 17:27:36.166 RestKitTest [492:fb03]標題字段:{ Connection =「Keep-Alive」; 「Content-Type」=「text/html」; Date =「Sun,09 Sep 2012 22:27:35 GMT」; 「Keep-Alive」=「timeout = 5,max = 100」; Server = Apache; 「Transfer-Encoding」=身份; } 2012-09-09 17:27:36.167 RestKitTest [492:fb03]正文:未指定任何輸入文件。「 – Hamid

+0

根據響應正文的日誌,它看起來像您的php腳本正在死於錯誤。也許你沒有傳遞需要的東西。另請注意,您應該向請求記錄用戶的實際腳本/端點/表單操作,而不是僅顯示登錄頁面的腳本。 – hlfcoding