2013-11-25 4 views
1

Я пытаюсь войти на сайт через форму HTML, используя AFNetworking 1.3. Я просто установил свои учетные данные и POST на правильный путь. Проблема заключается в том, что я не выпустил печенье, который гласит, что я вошел вФорма входа в систему с AFNetworking 1.3

NSURL *baseURL = [NSURL URLWithString:@"https://mysite.edu"]; 
AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:baseURL]; 
NSString *loginPath = @"/place/loginPage"; 

NSDictionary *loginParameters = @{@"sid" : @"username", 
            @"PIN" : @"12345678"}; 

NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" 
                   path:loginPath 
                  parameters:loginParameters 
              constructingBodyWithBlock:nil]; 

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"success: %@", operation.responseString); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"error: %@", operation.responseString); 
}]; 
[operation start]; 

Веб-сервер возвращает веб-страницу, которая гласит, что я не включено печенье:.

Для проверки информации авторизации для этой системы требуется использование файлов cookie HTTP. Наша система обнаружила, что ваш браузер отключил HTTP-файлы cookie или не поддерживает их. Дополнительную информацию о том, как правильно настроить браузер для использования с этой системой, можно найти на странице справки в вашем браузере.

Однако, если я повторяю свои файлы cookie, я обнаружил, что веб-сайт опубликовал мне файлы cookie, но не файлы cookie сеанса. Поэтому мой клиент AFNetworking действительно принимает файлы cookie? Есть ли настройка, которую я должен настроить, чтобы файлы cookie сеанса корректно работали с AFNetworking 1.3?

Я отредактировал свой заголовок HTTP-запроса, чтобы он соответствовал работающим браузерам, таким как Chrome.

+0

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

+0

Я пробовал ваши рекомендации и имитировал все поля заголовка HTTP, которые были успешно использованы в Chrome. Еще не повезло. Похоже, что он устанавливает cookie сеанса, как SESSION = – mosca1337

ответ

1

[Is] мой клиент AFNetworking действительно [] принимает cookies? Есть ли настройка, которую я должен настроить, чтобы файлы cookie сеанса корректно работали с AFNetworking 1.3?

AFNetworking не имеет конфигурации, зависящей от файлов cookie. Cookies несет ответственность только за Foundation URL Loading system.

Некоторые возможные решения:

  1. Установите AFHTTPRequestOperationLogger и настроить его с AFLoggerLevelDebug чтобы увидеть все заголовки HTTP. Это позволит вам увидеть, что на самом деле отправляется и принимается в консоли Xcode.

  2. Возможно, сервер может удалить файл cookie, например, если это сервер Ruby с включенным protect_from_forgery. Проверьте свои журналы сервера и this solution для получения информации об отключении или отправке соответствующего токена.

  3. Вы контролируете, как запросы используют файлы cookie с -[NSMutableURLRequest setHTTPShouldHandleCookies]. Убедитесь, что это установлено в YES (по умолчанию).

  4. Другие приложения могут изменить Cookie Примите политику, поэтому убедитесь, что -[NSHTTPCookieStorage cookieAcceptPolicy] возвращается NSHTTPCookieAcceptPolicyAlways (или NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain, если вам это нужно.)

+0

(Аннотация: вероятно, проблема заключается в том, что ваш сервер не отправляет их, а не то, что AFNetworking теряет их.) –

+0

Мы решили пойти другим (менее хрупким) маршрутом в целом , Спасибо в любом случае за вашу помощь – mosca1337

0

С Я пришел сюда при поиске рабочего решения для AFNetworking 2.0, не зная, что AFHTTPClient был удален из рамки, я вывешу новый способ установить эту связь здесь:

AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://examplewebsite.com"]]; 
[manager setRequestSerializer:[AFHTTPRequestSerializer serializer]]; 
[manager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"userName" password:@"password"]; 
Смежные вопросы