Чтение данных / Ответ / Тело перенаправленного NSURLDataTask

В настоящее время я пытаюсь получить доступ к веб-странице, где пользователь может войти в систему, используя свои учетные данные, после ввода своего имени пользователя и пароля - если он правильный, он будет перенаправлен на новый URL. Этот новый URL загружает веб-страницу с одной строкой, которую я собираюсь использовать.

Тем не менее, как я могу проверить содержимое перенаправленного URL? На данный момент я могу только проверить Ответ / Данные / Содержимое начальной страницы, загруженной следующим способом;

    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?

Благодарю.

1 ответ

Решение

Вы смотрите на это неправильно. Вы должны запросить у пользователя информацию для входа в систему напрямую и вставить ее в один NSURLDataTask. Затем задача данных должна запросить у сервера информацию для входа и вернуть некоторые данные.

Все это происходит с API (в широком смысле), где вы не будете предоставлять пользователю содержимое HTML, а вместо этого возвращать какие-то закодированные данные.

Так, например, как только у вас есть задача, определенная из URL или URLRequest, и вы начинаете задачу, вы затем используете обработчик завершения для проверки возвращенных данных и / или ошибки. Если здесь, вы можете декодировать возвращенные данные как NSString, а затем преобразовать JSON в объекты, такие как данные профиля пользователя (имя, возраст, адрес электронной почты, ...)

Я не стал вдаваться в подробности в этом ответе, потому что это очень очень широкая тема со многими вариантами использования. Посмотрите несколько учебных пособий по NSURLDataTasks или использованию API-интерфейсов от Swift и / или Objective-C.

Другие вопросы по тегам