2009-03-27 4 views
23

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

+(id)cookieWithProperties:(NSDictionary *)properties 

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

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

+0

Пожалуйста, разместите код, который вы используете, чтобы создать файл cookie; вы посмотрели http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSHTTPCookie_Class/Reference/Reference.html#//apple_ref/doc/uid/20001702-425346 – sbooth

ответ

19

Это, как вы установить свойства в куки:

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.

+4

На самом деле я не был способный заставить его работать, только с NSHTTPCookieDomain и NSHTTPCookiePath. См. Ответ jm. Также: http://lists.apple.com/archives/Webkitsdk-dev/2003/Sep/msg00003.html – mfazekas

+0

Мне удалось использовать NSHTTPCookieOriginURL, если I * также * указано NSHTTPCookiePath (спасибо jm ниже для подсказки) , Обратите внимание, что вы можете использовать метод path на url для предоставления значения (т. Е. [Url path]). –

37

Я заметил на на моем 2.2.1 Iphone, что печенье не получил создан, если 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]; 
7

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

я получил эту работу, однако:

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

Я нашел одну ошибку в примере 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]; 
+0

Я обновил свой ответ. Кажется разумным, хотя я больше не тестирую iphone. –

0

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

[NSHTTPCookie cookieWithProperties:dictionary] 

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

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