iOS/Objective-C - 如何在不丢失初始会话的情况下发送多个NSURLSessionDataTask请求?

Vah*_*ahe 5 objective-c ios nsurlsession

我目前正在从事iOS编程课程的项目.作为课程项目的一部分,我正在努力使特定部分成功运作.

我正在使用NSAlert对话框提供我的登录名和密码,以便在HTML字符串中获取已注册的类.

我的大学维持学生在大学信息系统上的入学课程表,我可以从中登录并查看我的课程.

我想登录大学网页,该网页有一个名为submit.asp的页面来处理从登录表单发送的POST请求.在实际的浏览器上,当我提交我的凭据,并在一些服务器处理并重定向到另一个页面后,我能够导航到我的课程安排页面,没有任何问题.

- (BOOL) loginToStudentPortal: (NSString *) ID : (NSString *) pin
{
    NSString *submitUrl = @"https://eweb4.laccd.edu/Common/submit.asp";
    NSString *scheduleUrl = @"https://eweb4.laccd.edu/WebStudent/validate.asp";

    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    NSURL *URL = [NSURL URLWithString:submitUrl];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];

    NSString * submitParams = [NSString stringWithFormat:@"ssn1=%@&ssn2=&pin=%@REDIRECT/WebStudent/validate.asp", ID, pin];
    NSString * submitParams2 = [NSString stringWithFormat:@"HOLDER=Y"];
    [request setHTTPMethod:@"POST"];
    [request setHTTPBody:[submitParams dataUsingEncoding:NSUTF8StringEncoding]];

    NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
        if (error) {
           NSLog(@"%@", error);
        } else {
           //Here I Try to initiate a second dataTaskWithRequest to the next URL
           //But there is no way to jump to the destination page without losing the session

           //NSString *receivedData = [[NSString alloc] initWithData:responseObject encoding:NSASCIIStringEncoding];
           //NSLog(@"%@ %@", response, receivedData);

    }];
    [dataTask resume];
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我在XCode 5中运行iPhone模拟器的初始请求时,我无法在第一次请求后保留会话.

尝试在main completionHandler的else块中启动后续dataTask请求是否正确?

其次,我是否需要手动确保我遵循服务器的任何重定向?

Vah*_*ahe 0

我能够解决该问题并最终到达目标页面。

我最初的尝试是一个开始,但我继续进一步调查该行为,似乎我无法继续的原因之一是我正在调试,并且我认为发生了超时。

当我运行该程序并删除所有断点时,该程序将输出正确的 HTML。

更重要的是,我确保在我的函数中重现了确切的事件链。我添加了完成处理程序中所需的所有数据任务。

我最终能够检索包含所需信息的 HTML 字符串。

事实证明,会话是通过我使用的方法进行管理的。可能我的会话超时了,这就是我提出最初问题的原因。