2011-03-02 1 views
1

Je fais une connexion simple et j'ai remarqué que pendant la redirection j'ai seulement 2 des 3 cookies requis pour entrer correctement. J'ai capturé l'autre cookie et les ai assemblés mais pour une raison quelconque je ne peux pas modifier les en-têtes à la volée?Comment modifier les cookies d'une requête lors d'une redirection dans objectif-c?

- (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; 
} 

L'idée générale est de mettre cet en-tête d'avoir la valeur de mes biscuits combinés

Répondre

3

je trouve que même si je ne pouvais pas modifier la demande existante, qui ne m'a pas empêché de créer une nouvelle demande et renvoie simplement celui-là :)

- (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; 
} 
Questions connexes