2012-06-20 179 views
0

我有一個使用webView的應用程序。在網站的主屏幕中,我想使用用戶在應用程序設置選項中輸入的用戶名和密碼進行登錄。目前我有這個代碼,我在解決方案中看到在這個論壇上提出的類似問題。但它不起作用(它沒有爲另一個人做)。從設置用戶名和密碼首選項登錄

-(IBAction)cachepressed:(id)sender{ 

    NSString *baseurl=[[NSUserDefaults standardUserDefaults] stringForKey:@"url_preference"]; 
    NSString *username= [[NSUserDefaults standardUserDefaults] stringForKey:@"name_preference"]; 
    NSString *password= [[NSUserDefaults standardUserDefaults] stringForKey:@"pswrd_preference"];  
    NSString* content = [NSString stringWithFormat:@"username=%@&password=%@", username, password]; 
    NSData *data=[content dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 
    NSString *postlength=[NSString stringWithFormat:@"%d",[data length]]; 
    NSString *loginpage= [baseurl stringByAppendingString:@"/index.php?title=Special:UserLogin"]; 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:loginpage]]; 
    [request setHTTPMethod:@"POST"]; 
    [request setValue:postlength forHTTPHeaderField:@"Content-Length"]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Length"]; 
    [request setHTTPBody:data]; 
    NSError *error=nil; 
    NSURLResponse *response=nil; 
    NSData *result=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
    NSString *HTMLString = [[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding]; 
    [webView loadHTMLString:HTMLString baseURL:[NSURL URLWithString:loginpage]];  

} 

我不太確定以[request setValue ...]開頭的兩行代碼。有人可以提出一個解決方案嗎?這將是一個很大的幫助。感謝預期。

回答

0

這很大程度上取決於如何在網站上進行身份驗證。

根據我可以從您的問題中得出的結論,您發佈的代碼使用POST向index.php?title = Special:UserLogin頁面發送名爲「username」和「password」的字段值。

您需要確保一切都相應設置。

1.您的字段在網站上的名稱是否相同?

也許登錄表單使用不同的字段名稱,而不是用戶名和密碼。檢查源代碼並查看輸入名稱是否確實是「用戶名」和「密碼」

2.您的主機是否允許發佈來自其他來源的數據?

我曾經設置我的地址,所以如果POST請求不是來自我的服務器,那麼POST請求就不會起作用,所以從iPad發佈數據不會起作用。 你也是這樣嗎?

3.登錄過程實際上是通過向該頁面發佈數據完成的?

也許在網站上使用AJAX在不同的PHP頁面上完成身份驗證,然後重定向到index.php?title = Special:UserLogin,我曾經見過這種情況。

最重要的是,您需要確切知道如何在webview中進行登錄之前在網站上完成登錄。糾正我,如果我錯了,但根據您的帖子它似乎並沒有在這裏

+0

感謝您的答覆。正如您指出的那樣,我更正了字段名稱。但我不瞭解其他兩點。有沒有辦法找出答案? – gamersoul

+0

好吧,數字2是不太可能的,大多數網站允許外部POST請求。對於數字3,我想最簡單的方法是查看瀏覽器中的網站源代碼。鏈接到該網站將有所幫助 – BBog