Подтвердить что ты не робот

NSURLRequest не отправляет файлы cookie

Я разрабатываю приложение для газетных журналов и использую 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, чтобы посмотреть на это. Может кто-нибудь, пожалуйста, дайте несколько советов, что может вызвать эту проблему?

4b9b3361

Ответ 1

Из этой темы магическое заклинание выглядит следующим образом:

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

(Предупреждение: непроверенный код.)

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

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

Ответ 2

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