读取 Data/Response/Body 个重定向的 NSURLDataTask

Read Data/Response/Body of redirected NSURLDataTask

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

但是,我怎样才能检查重定向的内容 url?目前我只能检查通过以下方法加载的初始页面的 Response/Data/Contents;

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

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

谢谢。

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

这一切都发生在 API 中(从广义上讲),您不会向用户呈现 HTML 内容,而是某种 returned 的编码数据。

因此,例如,一旦您从 URL 或 URL 请求定义了一个任务,并且开始了该任务,您就可以使用完成处理程序来验证 return编辑数据 and/or 错误。如果在这里,您可以将 returned 数据解码为 NSString,然后将 JSON 转换为对象,例如用户的个人资料数据(姓名、年龄、电子邮件...)

我没有在这个答案中详细介绍,因为这是一个非常广泛的主题,有很多用例。从 Swift and/or Objective-C.

中查找有关 NSURLDataTasks 或使用 API 的一些教程