我目前正在研究一个 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;
}
但是,当我在 XCode 5 中从 iPhone 模拟器运行初始请求时,我无法在第一个请求后保留会话。
尝试在主完成处理程序的 else 块中启动对 dataTask 请求的后续操作是否正确?
其次,我是否需要手动确保我遵循来自服务器的任何重定向?