Get cookies from NSHTTPURLResponse

前端 未结 5 910
忘掉有多难
忘掉有多难 2020-12-16 20:02

I\'ve an extremely weird problem, I\'m requesting a URL and I want to get the cookies from it, I\'ve used this way to get the cookies:

- (void)connection:(NS         


        
相关标签:
5条回答
  • 2020-12-16 20:30

    @biloshkurskyi.ss answer is spot on.

    I spent half a day trying to find out why some of my cookies were not appearing in my response.allHeaderFields on iOS but it was there on Android (using the same service).

    The reason is because some cookies are extracted in advance and stored in the shared cookie store. They will not appear in allHeaderFields.

    Here's the swift 3 version of the answer if anyone needs it:

    let request = URLRequest(url: myWebServiceUrl)
    let session = URLSession.shared
    let task = session.dataTask(with: request, completionHandler: {
        (data, response, error) in
        if let error = error {
            print("ERROR: \(error)")
        } else {
            print("RESPONSE: \(response)")
            if let data = data, let dataString = String(data: data, encoding: .utf8) {
                print("DATA: " + dataString)
            }
            for cookie in HTTPCookieStorage.shared.cookies! {
                print("EXTRACTED COOKIE: \(cookie)") //find your cookie here instead of httpUrlResponse.allHeaderFields
            }
        }
    })
    task.resume()
    
    0 讨论(0)
  • 2020-12-16 20:32

    Did you tried following code sample, it should work:

    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
    {
        NSArray *cookies =[[NSArray alloc]init]; 
        cookies = [NSHTTPCookie 
            cookiesWithResponseHeaderFields:[response allHeaderFields] 
            forURL:[NSURL URLWithString:@""]]; // send to URL, return NSArray
    }
    
    0 讨论(0)
  • 2020-12-16 20:36

    Try this code:

    for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies])
    {
        NSLog(@"name: '%@'\n",   [cookie name]);
        NSLog(@"value: '%@'\n",  [cookie value]);
        NSLog(@"domain: '%@'\n", [cookie domain]);
        NSLog(@"path: '%@'\n",   [cookie path]);
    }
    
    0 讨论(0)
  • 2020-12-16 20:45
    for (NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies])
    {
        NSLog(@"name: '%@'\n",   [cookie name]);
        NSLog(@"value: '%@'\n",  [cookie value]);
        NSLog(@"domain: '%@'\n", [cookie domain]);
        NSLog(@"path: '%@'\n",   [cookie path]);
    }
    

    Second code is :

    NSHTTPURLResponse *HTTPResponsesss = (NSHTTPURLResponse *)response;
    NSDictionary *fields = [HTTPResponsesss allHeaderFields];
    NSString *cookie = [fields valueForKey:@"Set-Cookie"]; // It is your cookie
    

    NSLog(@"%@", cookie);

    Both codes work fine.

    0 讨论(0)
  • 2020-12-16 20:45

    It will work.

    NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
            NSString *cookieValue = @"";
            NSString *cookieHeaderValue = @"";
            NSString *finalCookieValue = @"";
            
            for (NSHTTPCookie *each in cookieStorage.cookies) {
                if ([each.name isEqualToString:@"ASP.NET_SessionId"]) {
                    cookieHeaderValue = [cookieHeaderValue stringByAppendingString:each.name];
                    cookieHeaderValue = [cookieHeaderValue stringByAppendingString:@"="];
                    cookieHeaderValue = [cookieHeaderValue stringByAppendingString:each.value];
                    cookieHeaderValue = [cookieHeaderValue stringByAppendingString:@";"];
                } else {
                    cookieValue = [cookieValue stringByAppendingString:each.name];
                    cookieValue = [cookieValue stringByAppendingString:@"="];
                    cookieValue = [cookieValue stringByAppendingString:each.value];
                    cookieValue = [cookieValue stringByAppendingString:@";"];
                }
            }
            
            finalCookieValue = [NSString stringWithFormat:@"%@%@", cookieHeaderValue, cookieValue];
    
    0 讨论(0)
提交回复
热议问题