Как изменить файлы cookie запроса во время перенаправления в target-c? - PullRequest
1 голос
/ 02 марта 2011

Я делаю простой вход в систему и заметил, что во время перенаправления у меня есть только 2 из 3 необходимых файлов cookie для правильного входа. Я захватил другое печенье и соединил их, но по какой-то причине я не могу изменить заголовки на лету?

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSHTTPURLResponse *)response {
    NSURL* redirected_url = [request URL];
    NSString* querystr = [redirected_url absoluteString];

    if (response != nil) {
        NSArray* zzzz = [NSHTTPCookie 
                         cookiesWithResponseHeaderFields:[response allHeaderFields] 
                         forURL:[NSURL URLWithString:@""]];

        if ([zzzz count] > 0) {
            if ([querystr isEqualToString:@"https://www.localhost.com/specificurl.aspx"]) {
                NSMutableArray* actualCookies = [[NSMutableArray alloc] init];

                NSHTTPCookie* obj = [self.tmpCookies objectAtIndex:0];
                [actualCookies addObject:obj];
                [actualCookies addObject:zzzz];

                NSArray* authToken = [[NSArray alloc] initWithArray:actualCookies];

                //BLOWS UP HERE ?? NSDictionary* headers = [NSHTTPCookie requestHeaderFieldsWithCookies:authToken];
                //[request setAllHTTPHeaderFields:authToken];

                [viewController setAuthCookieAfterValidLogin:zzzz];
            }
        }
    }

    return request;
}

Общая идея состоит в том, чтобы установить в этом заголовке значение моих объединенных файлов cookie

1 Ответ

3 голосов
/ 03 марта 2011

Я обнаружил, что, хотя я не мог изменить существующий запрос, это не помешало мне создать новый запрос и просто вернуть его:)

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSHTTPURLResponse *)response {
    NSURL* redirected_url = [request URL];
    NSString* querystr = [redirected_url absoluteString];

    if (response != nil) {
        NSArray* zzzz = [NSHTTPCookie 
                         cookiesWithResponseHeaderFields:[response allHeaderFields] 
                         forURL:[NSURL URLWithString:@""]];

        if ([zzzz count] > 0) {
            if ([querystr isEqualToString:@"https://www.localhost.com/specificurl.aspx"]) {
                NSMutableArray* actualCookies = [[NSMutableArray alloc] init];
                NSUInteger i, count = [zzzz count];
                for (i = 0; i < count; i++) {
                    NSHTTPCookie* xxx = [zzzz objectAtIndex:i];
                    [actualCookies addObject:xxx];
                }

                NSHTTPCookie* obj = [self.tmpCookies objectAtIndex:0];
                [actualCookies addObject:obj];

                NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies:actualCookies];

                NSURL *url = [NSURL URLWithString:@"https://www.localhost.com/specificurl.aspx"];
                NSMutableURLRequest* xrequest = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];

                [xrequest setHTTPMethod:@"GET"];
                [xrequest setAllHTTPHeaderFields:headers];
                [xrequest setValue:@"https://www.localhost.com/Default.aspx?Site_ID=500000" forHTTPHeaderField: @"Referer"];

                [viewController setAuthCookieAfterValidLogin:zzzz];

                return xrequest;
            }
        }
    }

    return request;
}
...