在接下来的代码行中,我尝试通过 POST 登录到 moodle 系统。这工作得很好,如果我留下两行评论,我可以在登录后看到网页。但是当我尝试导航到位于 protected 区域中的下一个网页时,我总是会看到登录页面。
所以我的问题是,如何导航到 protected 页面并将其显示在 WebView 中?
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults synchronize];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[defaults stringForKey:@"loginpage"]]];
[request setHTTPMethod:@"POST"];
NSString *post =[[NSString alloc] initWithFormat:@"username=%@&password=%@",
[defaults stringForKey:@"username"],[defaults stringForKey:@"password"]];
NSLog(@"Post is: %@",post);
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSLog(@"postData is: %@",postData);
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSLog(@"postLength is: %@",postLength);
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];
NSLog(@"request is: %@", [request allHTTPHeaderFields]);
[self.webview loadRequest:request];
//if i do not comment the next two lines, the loginpage is displayed in the webview.
//Otherwise the correct page with username after login is displayed.
//request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[defaults stringForKey:@"displaypage"]]];
//[self.webview loadRequest:request];
NSLog(@"Done");
最佳答案
loadRequest 方法是异步的,这意味着当该方法返回时,很可能还没有加载完第一个网页。 因此,当您取消注释这两行时,可能是第二个请求正在执行,而第一个请求尚未完成。
您应该在 UIWebViewDelegate 的 webViewDidFinishLoad: 方法中执行第二个请求。
关于ios - 通过 POST 登录后如何到达下一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21683553/