AFNetworking 2.0 - неожиданная ошибка NSURLErrorDomain -1012
Мы столкнулись с следующей проблемой с нашим приложением, которое использует AFNetworking 2.0.
При использовании метода AFHTTPRequestOperationManager
GET мы получили сообщение об ошибке NSURLErrorDomain code -1012
. Запрос, используемый HTTPS и сервером, не требует аутентификации пользователя. Запрос никогда не дошел до сервера.
Мы выполнили несколько тестов, и это первый раз, когда была произведена ошибка, и нам интересно, как эта ошибка может быть получена, потому что это не кажется актуальным.
Настройка AFHTTPRequestOperationManager:
httpOperationManager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:
[NSURL URLWithString: HTTPS_URL)]];
httpOperationManager.responseSerializer =
[AFXMLParserResponseSerializer serializer];
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled: YES];
ПОЛУЧИТЬ ЗАПРОС
AFHTTPRequestOperation *op =[httpOperationManager GET:
[NSString stringWithFormat:SOME_PATH]
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject) {
//code to setup NSXMLParser ...
}
failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"error %@", [error localizedDescription]);
}];
Ответы
Ответ 1
Я думаю, что вы уже решили проблему, но если вы пытаетесь пройти аутентификацию на сервере, у которого нет действительного сертификата, вы должны установить YES
для свойства allowInvalidCertificates
в свой AFHTTPRequestOperationManager
объект:
[yourManager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"your_username" password:@"your_password"];
[yourManager.securityPolicy setAllowInvalidCertificates:YES];
Кроме того, как указано в @a1phanumeric, может потребоваться включить эту строку:
[yourManager.securityPolicy setValidatesDomainName:NO];
Приветствия.
Ответ 2
NSURLErrorDomain -1012 NSURLErrorUserCancelledAuthentication
. (См. список кодов ошибок и поиск -1012.)
Вы заявляете, что "сервер не требует аутентификации пользователя". Но эта ошибка не вызывается, если это правда.
Возможные причины:
- Ваш сервер ошибочно запрашивает авторизацию (ошибка сервера)
- URL, сформированный с помощью
HTTPS_URL
и SOME_PATH
, не соответствует ожидаемому, а другой сервер запрашивает авторизацию
- Некоторый посредник (например, прокси-сервер или точка доступа) требует авторизации.
Некоторые советы по отладке:
- Установите точки останова в реализации AFNetworking, чтобы увидеть, какой URL-адрес попадает
- Настроить AFHTTPRequestOperationLogger, чтобы вы могли видеть фактический корпус запроса и ответ в журнале консоли
- Сделайте тот же запрос с помощью
curl
или Advanced Rest Client и соблюдайте ответ сервера
Боковое примечание: я думаю, что [NSString stringWithFormat:SOME_PATH]
бессмысленно - почему бы просто не использовать SOME_PATH
?