Редактировать: адаптация для отредактированного вопроса
NSHTTPCookieStorage
имеет метод -setCookies:forURL:mainDocumentURL:
, поэтому проще всего использовать NSURLConnection
и внедрить -connection:didReceiveResponse:
, извлекая кукии вставив их в баночку с печеньем:
- ( void )connection: (NSURLConnection *)connection
didReceiveResponse: (NSURLResponse *)response
{
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
NSArray *cookies;
cookies = [ NSHTTPCookie cookiesWithResponseHeaderFields:
[ httpResponse allHeaderFields ]];
[[ NSHTTPCookieStorage sharedHTTPCookieStorage ]
setCookies: cookies forURL: self.url mainDocumentURL: nil ];
}
(Вы также можете просто извлечь объект NSDictionary
из NSHTTPCookie
с помощью properties
, а затем записать словарь на диск.Это так же просто, как использовать NSDictionary
-dictionaryWithContentsOfFile:
, а затем создать файл cookie с помощью -initWithProperties:
.)
Затем вы можете извлечь файл cookie из хранилища, когда оно вам понадобится:
- ( void )reloadWebview: (id)sender
{
NSArray *cookies;
NSDictionary *cookieHeaders;
NSMutableURLRequest *request;
cookies = [[ NSHTTPCookieStorage sharedHTTPCookieStorage ]
cookiesForURL: self.url ];
if ( !cookies ) {
/* kick off new NSURLConnection to retrieve new auth cookie */
return;
}
cookieHeaders = [ NSHTTPCookie requestHeaderFieldsWithCookies: cookies ];
request = [[ NSMutableURLRequest alloc ] initWithURL: self.url ];
[ request setValue: [ cookieHeaders objectForKey: @"Cookie" ]
forHTTPHeaderField: @"Cookie" ];
[ self.webView loadRequest: request ];
[ request release ];
}