我目前正在尝试访问一个网页,用户可以在输入用户和密码后使用他们的凭据登录 - 如果正确,它将重定向到新的网址。这个新网址加载了一个我打算使用的单个字符串的网页。
但是,我如何检查重定向网址的内容?目前我只能检查通过以下方法加载的初始页面的响应/数据/内容;
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
casSession = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
NSString *urlAddress = @"https://originalurl.com";
NSURL *httpUrl = [NSURL URLWithString:urlAddress];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:httpUrl];
[loginPage loadRequest:requestObj];
NSURLSessionDataTask *redirect = [casSession dataTaskWithURL:httpUrl completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSString *newURL = [NSString stringWithFormat: @"%@", response.URL];
if ([newURL containsString:@"ticket=ST"]) {
NSString * registrationID = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"REGISTRATION: %@", registrationID);
if (registrationID != nil) {
dispatch_async(dispatch_get_main_queue(), ^{
loginPage.hidden = YES;
});
}
} else {
NSLog(@"No ticket recieved");
}
}];
[redirect resume];
我不确定要使用哪个委托,以便每次重定向发生时主动检查,然后获取新网址的内容?
感谢。
答案 0 :(得分:2)
你看错了方法。您应该直接向用户查询登录信息,并将其插入到单个NSURLDataTask中。然后数据任务应该使用登录信息查询服务器,并返回一些数据。
这一切都发生在API(以广义的说法),你不会向用户呈现HTML内容,而是返回某种类型的编码数据。
因此,例如,一旦从URL或URLRequest定义了任务,并开始执行任务,就可以使用完成处理程序来验证返回的数据和/或错误。如果在这里,您可以将返回的数据解码为NSString,然后将JSON转换为对象,例如用户的配置文件的数据(名称,年龄,电子邮件,......)
我没有在这个答案中详细说明,因为它是一个非常广泛的主题,有很多用例。查看有关NSURLDataTasks的一些教程或使用Swift和/或Objective-C中的API。