NSURLRequest не отправляет куки - PullRequest
13 голосов
/ 30 марта 2012

Я разрабатываю приложение для газетного киоска и использую NSURLRequest для загрузки ресурсов выпуска.

NSArray *contents = [issue.tableOfContents objectForKey:kSNTableOfContentsContents];
NSHTTPCookie *cookie;
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSLog(@"HERE GO MY COOKIES");
for (cookie in [cookieJar cookies]) {
    NSLog(@"%@", cookie);
}            
for (NSDictionary *contentItem in contents) {
    NSString *contentURL_string = [contentItem objectForKey:kSNTableOfContentsRemoteURL];
    NSURL *contentURL = [NSURL URLWithString:contentURL_string];
    NSString *fileName = [contentItem objectForKey:kSNTableOfContentsContentsURL];      
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:contentURL];
    NKAssetDownload *asset = [newsstandIssue addAssetWithRequest:request];
    [request release];
    ....
    [asset downloadWithDelegate:self];
    ....
}

Когда выполняется первый цикл for, мои файлы cookie отображаются в NSHTTPCookieStorage , но при отправке фактических запросов информация о файлах cookie в заголовках отсутствует. Я использую CharlesProxy , чтобы найти это. Может ли кто-нибудь дать совет, что может быть причиной этой проблемы?

Ответы [ 2 ]

18 голосов
/ 06 апреля 2012

С этой темы , магическое заклинание выглядит так:

NSDictionary * headers = [NSHTTPCookie requestHeaderFieldsWithCookies:
  [cookieJar cookies]];
[request setAllHTTPHeaderFields:headers];

(Внимание: непроверенный код.)

Это преобразует ваш файл cookie вмассив файлов cookie, затем к NSDictionary заголовкам и, наконец, сшивание этих заголовков по вашему запросу.Это сравнимо с выполнением этого вручную, как Адам Шимке связал в вопросе с ошибками, но, на мой взгляд, намного чище.

Согласно документации , вы также можете проверить HTTPShouldHandleCookiesчтобы проверить, правильно ли используется политика использования файлов cookie по умолчанию.

1 голос
/ 07 апреля 2012

В проектах iOS я нашел ASIHTTPRequest очень полезным для такого рода проблем.Он делает такие вещи, как аутентификация и файлы cookie, намного лучше, чем встроенные функции: http://allseeing -i.com / ASIHTTPRequest /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...