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...] 开头的两行代码。有人可以提出解决方案吗?这将是一个很大的帮助。感谢期待。

4

1 回答 1

0

这在很大程度上取决于如何在网站上进行身份验证。

根据我从您的问题中得出的结论,您发布的代码使用 POST 将名为“用户名”和“密码”的字段的值发送到 index.php?title=Special:UserLogin 页面。

您需要确保所有内容都已相应设置。

1.你的字段名称在网站上是否相同?

也许登录表单使用不同的字段名称,而不是用户名和密码。检查源代码,看看输入的名称是否确实是“用户名”和“密码”

2. 您的主机是否允许发布来自不同来源的数据?

我曾经设置过我的,所以如果 POST 请求不是来自我的服务器,则它们不会起作用,因此从 iPad 发布数据将无法正常工作。你也是这种情况吗?

3. 登录过程真的是通过向那个页面发布数据来完成的吗?

也许在网站上,身份验证是在不同的 php 页面上使用 AJAX 完成的,然后您被重定向到 index.php?title=Special:UserLogin,我过去曾见过这种情况。

底线是,在 webview 中进行登录之前,您需要确切地知道在网站上是如何完成登录的。如果我错了,请纠正我,但根据您的帖子,这里似乎并非如此

于 2012-06-20T09:44:00.250 回答