Objective-C NSUrlConnection: нет возврата cookie

Я работаю с аутентификацией NTLM Server (SharePoint), мне удается сделать запрос GET, используя NSURLConnection и учетные данные.

Я хочу получить сессионные куки-файлы из этого запроса, например, на рабочем столе, и поместить их в [NSHTTPCookieStorage sharedHTTPCookieStorage], для будущего соединения в WebView.

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response;
    NSLog(@"Response: %@", [HTTPResponse allHeaderFields]); // Log below
    NSArray *cookies = [NSHTTPCookie
                cookiesWithResponseHeaderFields:[HTTPResponse allHeaderFields]
                forURL:[NSURL URLWithString:@"https://domain.com"]];

    NSLog(@"How many Cookies: %d", cookies.count); // GOT 0 HERE

    [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookies:cookies forURL:[NSURL URLWithString:@"https://domain.com"] mainDocumentURL:nil];

}

У меня есть этот ответ, который не является cookie, я думаю (я изменил значения):

Response: {
        "Cache-Control" = "private,max-age=0";
        Connection = "Keep-Alive";
        "Content-Encoding" = gzip;
        "Content-Length" = 1536;
        "Content-Type" = "text/html";
        Date = "Thu, 03 Jul 2014 09:00:35 GMT";
        Etag = "\"{F1F0AAgregr-41DA-AgergA26-51A51B019910},3\"";
        Expires = "Wed, 18 Jun 2014 09:00:36 GMT";
        "Last-Modified" = "Fri, 02 May 2014 13:35:13 GMT";
        MicrosoftSharePointTeamServices = "14.0.0.6120";
        "Persistent-Auth" = true;
        "Public-Extension" = "http://schemas.microsoft.com/repl-2";
        ResourceTag = "rt:F1F0AAE2gerge1B019gerg000003";
        SPRequestGuid = "975dccbgregergrgbbeff4f5b5";
        Server = "Microsoft-IIS/7.5";
        Vary = "Accept-Encoding";
        "X-MS-InvokeApp" = "1; RequireReadOnly";
        "X-Powered-By" = "ASP.NET";
        "X-SharePointHealthScore" = 0;
    }

Я знаю, что файл cookie для Expires/Max-Age должен иметь значение Session. У вас есть идея, возможно ли то, что я хочу сделать?

Спасибо!

1 ответ

Вы можете проверить cookie в методе - - (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response

Согласно документации этот метод используется для - connection:willSendRequest:redirectResponse: вызывается всякий раз, когда соединение определяет, что оно должно изменить URL-адреса, чтобы продолжить загрузку запроса. Это дает делегату возможность проверить и, если необходимо, изменить запрос и проверить ответ.

Так что используйте как -

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)response {
    NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response;
    NSLog(@"Response: %@", [HTTPResponse allHeaderFields]); // Log below
    NSArray *cookies = [NSHTTPCookie
                cookiesWithResponseHeaderFields:[HTTPResponse allHeaderFields]
                forURL:[NSURL URLWithString:@"https://domain.com"]];

    NSLog(@"How many Cookies: %d", cookies.count); 
}
Другие вопросы по тегам