在下一个代码行中,我尝试通过POST登录moodle系统。这很有效,如果我留下两行注释,我可以在登录后看到网页。但是当我尝试导航到下一个位于受保护区域的网页时,我总能看到登录页面。
所以我的问题是,如何导航到受保护的页面并在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");
答案 0 :(得分:1)
loadRequest方法是异步的,这意味着当方法返回时,很可能它还没有完成加载第一个网页。 因此,当您取消注释这两行时,可能第二个请求正在执行而第一个请求尚未完成。
您应该在UIWebViewDelegate的webViewDidFinishLoad:方法中执行第二个请求。
答案 1 :(得分:0)
在故事板中设置委托后,以下代码完成了这项工作:
-(void)webViewDidFinishLoad:(UIWebView *)webView {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults synchronize];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[defaults stringForKey:@"displaypage"]]];
[self.webview loadRequest:request];
}