2014-02-10 2 views
0

В следующих версиях кода я пытаюсь войти в систему moodle через POST. Это работает неплохо, если я оставлю две строки прокомментированными, я могу увидеть веб-страницу после входа в систему. Но когда я пытаюсь перейти к следующей веб-странице, находящейся в защищенной области, я всегда вижу страницу входа.Как я могу добраться до следующей страницы после входа в систему через POST

Так что мой вопрос в том, как я могу перейти на защищенную страницу и отобразить ее в веб-просмотре?

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

, что вы пытаетесь сделать, вы хотите создать веб-браузер для себя. или что-то другое. вот что вы делаете, это загрузка только одного запроса в webview. – Pawan

+0

Я пытаюсь написать простое приложение, которое регистрирует пользователя в системе moodle и отображает защищенный сайт, поэтому вам не нужно всегда запускать свой веб-браузер на своем смартфоне и делать эти клики для себя. – ksome

+0

Есть ли способ, который вы можете подтвердить на сервере, что вы действительно вошли в систему? Кроме того, я использовал NSUTF8StringEncoding для параметров сообщений, не знаю, может ли это быть проблемой. – Merlevede

ответ

1

Метод loadRequest является асинхронным, а это означает, что, когда метод возвращает, то очень вероятно, что он не завершил загрузку первого веб-страницы. Итак, когда вы раскомментируете эти две строки, возможно, второй запрос выполняется, пока первый не закончил.

Вы должны выполнить второй запрос в методе webViewDidFinishLoad UIWebViewDelegate:.

0

После установки делегата в раскадровке, следующий код сделал работу:

-(void)webViewDidFinishLoad:(UIWebView *)webView { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults synchronize]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[defaults stringForKey:@"displaypage"]]]; 
    [self.webview loadRequest:request]; 
} 
Смежные вопросы