2017-02-19 4 views
1

Ich versuche Set-Cookie Header in einer HTTP-Antwort gesendet zuzugreifen:mehrere Set-Cookie-Header von NSHTTPURLResponse Get

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

Die HTTP-Server wie so zwei Set-Cookie Header senden:

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

jedoch Die [HTTPResponse allHeaderFields]-Schnittstelle kombiniert die mehreren Set-Cookie-Header in einer durch Kommas getrennten Zeichenfolge:

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

This cocoa-dev mailing list message bestätigt meine Beobachtung.

Gibt es eine Schnittstelle, um jede Set-Cookie Kopfzeile separat zu erhalten oder auf die rohen Kopfzeilen zuzugreifen?

+0

Ich denke, Sie müssen es manuell tun: 'NSArray * setCookiesHeaders = Header [@" "Set-Cookie"] componentsSeparatedByString: @ ","] ', und analysieren, um Sie Informationen abrufen. Die Sache ist, dass die value sind string, und headers sind dictionary, so dass Sie nur einen Schlüssel haben können, und anscheinend kombinieren sie sie mit einem "," wenn es bereits existiert. – Larme

+2

Die Trennung der Zeichenfolge durch Komma ist nicht genug, da der Cookie selbst Kommas enthalten kann auch. – parshap

Antwort

1

iOS und Mac OS eine NSHTTPCookie Klasse definieren, die analysieren kann und geben Ihnen die Informationen, die Sie suchen:

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

Weitere Informationen finden Sie in der documentation für NSHTTPCookie.

Verwandte Themen