2017-02-19 2 views
1

Я пытаюсь получить доступ Set-Cookie заголовки, посланные в ответ HTTP:Получить несколько заголовков Set-Cookie из NSHTTPURLResponse

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response; 
    NSDictionary *headers = [httpResponse allHeaderFields]; 
    NSLog([headers description]); 
} 

Сервер HTTP отправляет два Set-Cookie заголовки, как так:

Set-Cookie: foo=1; httponly; Path=/ 
Set-Cookie: bar=2; httponly; Path=/ 

Однако , интерфейс [HTTPResponse allHeaderFields] объединяет множество заголовков Set-Cookie в одну строку с разделителями-запятыми:

"Set-Cookie" = "foo=1; httponly; Path=/, bar=2; httponly; Path=/" 

This cocoa-dev mailing list message подтверждает мое наблюдение.

Есть ли интерфейс для получения каждого заголовка Set-Cookie или доступа к исходным заголовкам?

+0

Я думаю, что вам нужно сделать это вручную: 'NSArray * setCookiesHeaders = headers [@" "Set-Cookie"] componentsSeparatedByString: @ ","] 'и проанализировать его, чтобы получить информацию. Дело в том, что значение - это строка, а заголовки - словарь, поэтому вы можете иметь только один ключ каждого из них, и, по-видимому, они объединяют их с символом «,», если он уже существует. – Larme

+2

Недостаточно разделить строку запятыми, поскольку файл cookie может содержать запятые также. – parshap

ответ

1

IOS и MacOS определяют NSHTTPCookie класс, который можно разобрать и дать вам информацию, которую вы ищете:

NSArray<NSHTTPCookie *> *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields: [httpResponse allHeaderFields] forURL: [httpResponse url]]; 

Для получения дополнительной информации, видеть documentation для NSHTTPCookie.

Смежные вопросы