it-swarm.com.ru

Создать куки для NSURLRequest?

Я пытаюсь отправить строку аутентификации через cookie в NSMutableURLRequest. Я пытаюсь создать NSHTTPCookie через

 +(id)cookieWithProperties:(NSDictionary *)properties

Но нигде я не смог найти, как указать свойства, отличные от простой пары ключ-значение, которую я имею для аутентификации. Когда я использую только свою пару ключ-значение, возвращается ноль.

Будем весьма благодарны за любые примеры, документацию или мысли по этому поводу. 

23
Michael Grinich

Вот как вы устанавливаете свойства в куки:

 NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys:
                              url, NSHTTPCookieOriginURL,
                              @"testCookies", NSHTTPCookieName,
                              @"1", NSHTTPCookieValue,
                              nil];
  NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:properties];

В приведенном выше примере: url, testCookies и 1 являются значениями. Аналогично, NSHTTPCookieOriginURL, NSHTTPCookieName, NSHTTPCookieValue являются ключамидля объекта NSDictionary, как в парах ключ-значение

Вы устанавливаете/получаете свойства, используя NSDictionary и добавляете в NSHTTPCookie.

19
Jordan

На моем 2.2.1 iphone я заметил, что cookie не создается, если не указан NSHTTPCookiePath, даже если он указан как «необязательный» в документации:

Итак, я делаю:

NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys:
                            @"domain.com", NSHTTPCookieDomain,
                            @"/", NSHTTPCookiePath,  // IMPORTANT!
                            @"testCookies", NSHTTPCookieName,
                            @"1", NSHTTPCookieValue,
                            nil];
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:properties];

NSArray* cookies = [NSArray arrayWithObjects: cookie, nil];

NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];

[request setAllHTTPHeaderFields:headers];
38
jm.

Я не мог заставить это работать.

Я получил это работать однако:

NSMutableURLRequest* ret = [NSMutableURLRequest requestWithURL:myURL];
[ret setValue:@"myCookie=foobar" forHTTPHeaderField:@"Cookie"];
7
Chris Hinkle

Я нашел одну ошибку в примере jm: NSHTTPCookiePath должен быть @"/", но не @"\\\\".

NSDictionary *properties = [NSDictionary dictionaryWithObjectsAndKeys:
                            @"domain.com", NSHTTPCookieDomain,
                            @"/", NSHTTPCookiePath,  // IMPORTANT!
                            @"testCookies", NSHTTPCookieName,
                            @"1", NSHTTPCookieValue,
                            nil];
NSHTTPCookie *cookie = [NSHTTPCookie cookieWithProperties:properties];

NSArray* cookies = [NSArray arrayWithObjects: cookie, nil];

NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];

[request setAllHTTPHeaderFields:headers];
6
Serhiy

ключ NSHTTPCookiePath должен существовать в словаре при использовании 

[NSHTTPCookie cookieWithProperties:dictionary]

метод, использующий NSHTTPCookieDomain или NSHTTPCookieOriginURL. И значение для NSHTTPCookiePath должно быть @"/", а не @"\\".

0
Dexter Xiong