读取重定向的NSURLDataTask的数据/响应/正文

时间:2018-03-22 14:26:45

标签: ios objective-c redirect nsurlsession nsurlsessiondatatask

我目前正在尝试访问一个网页,用户可以在输入用户和密码后使用他们的凭据登录 - 如果正确,它将重定向到新的网址。这个新网址加载了一个我打算使用的单个字符串的网页。

但是,我如何检查重定向网址的内容?目前我只能检查通过以下方法加载的初始页面的响应/数据/内容;

    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];

我不确定要使用哪个委托,以便每次重定向发生时主动检查,然后获取新网址的内容?

感谢。

1 个答案:

答案 0 :(得分:2)

你看错了方法。您应该直接向用户查询登录信息,并将其插入到单个NSURLDataTask中。然后数据任务应该使用登录信息查询服务器,并返回一些数据。

这一切都发生在API(以广义的说法),你不会向用户呈现HTML内容,而是返回某种类型的编码数据。

因此,例如,一旦从URL或URLRequest定义了任务,并开始执行任务,就可以使用完成处理程序来验证返回的数据和/或错误。如果在这里,您可以将返回的数据解码为NSString,然后将JSON转换为对象,例如用户的配置文件的数据(名称,年龄,电子邮件,......)

我没有在这个答案中详细说明,因为它是一个非常广泛的主题,有很多用例。查看有关NSURLDataTasks的一些教程或使用Swift和/或Objective-C中的API。