Создать файл cookie для NSURLRequest?
Я пытаюсь отправить строку аутентификации через файл cookie в NSMutableURLRequest. Я пытаюсь создать NSHTTPCookie через
+(id)cookieWithProperties:(NSDictionary *)properties
Но нигде я не смог найти, как указать свойства, отличные от простой пары ключ-значение, которую я имею для аутентификации. Когда я использую только пару ключевых значений, возвращается nil.
Будем очень благодарны за любые примеры, документацию или мысли по этому поводу.
Ответы
Ответ 1
Вот как вы устанавливаете свойства в файле cookie:
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
.
Ответ 2
Я заметил на моем 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];
Ответ 3
Я не мог заставить это работать.
Я получил это, чтобы работать, однако:
NSMutableURLRequest* ret = [NSMutableURLRequest requestWithURL:myURL];
[ret setValue:@"myCookie=foobar" forHTTPHeaderField:@"Cookie"];
Ответ 4
Я нашел одну ошибку в примере 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];
Ответ 5
key NSHTTPCookiePath
должен существовать в словаре при использовании
[NSHTTPCookie cookieWithProperties:dictionary]
используя NSHTTPCookieDomain
или NSHTTPCookieOriginURL
.
И значение для NSHTTPCookiePath
должно быть @"/"
not @"\\"
.