FarisZ
FarisZ

Reputation: 27

Read Data/Response/Body of redirected NSURLDataTask

I am currently trying to access a webpage where the user can login using their credentials, after entering their user and password - if correct it will redirect to a new url. This new url loads a webpage with a single string which I intend to use.

However, how am I able to check the contents of the redirected url? At the moment I am only able to check the Response/Data/Contents of the initial page loaded by the following method;

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

I'm not sure which delegate to use, in order to actively check every time a redirection happens and then obtain the contents of the new url?

Thanks.

Upvotes: 0

Views: 191

Answers (1)

Alec O
Alec O

Reputation: 1707

You’re looking at this the wrong way. You should query the user for the login info directly and insert that into a single NSURLDataTask. Then the data task should query the server with the login info, and return some data.

This all happens with APIs (in a broad manner of speaking) where you will not present HTML contents to the user, but instead some sort of encoded data that is returned.

So for example, once you have a task defined from a URL or URLRequest, and you begin the task, you then use the completion handler to verify the returned data and/or error. If here, you may decode the returned data as a NSString, and then convert the JSON to objects, such as a user’s profile’s data (name, age, email, ...)

I did not go into detail in this answer because it is a very very broad topic, with many use cases. Look up some tutorials on NSURLDataTasks or consuming APIs from Swift and/or Objective-C.

Upvotes: 2

Related Questions