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

AFNetworking с кодом ошибки запроса 999

Я новичок в objective-c, и мне сложно провести время с AFNetworking.

Итак, я хочу сделать простой запрос POST на сервер, который пришлет мне соль. Я делаю простое приложение, чтобы проверить свой запрос, но я не понимаю, почему я получаю код ошибки 999.

Вот пример моего кода.

+ (void)simpleRequest; {
    NSURL *mailserver = [NSURL URLWithString:@"https://localhost:4443/"];

    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithBaseURL:mailserver];
    manager.securityPolicy.allowInvalidCertificates = TRUE;
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    NSDictionary *parameters = @{@"username": @"testtest"};

    [manager POST:@"api/v0/login/salt" parameters:parameters success:^(NSURLSessionDataTask *operation, id responseObject) {
        NSLog(@"JSON: %@", responseObject);
    } failure:^(NSURLSessionDataTask *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];
}

Я связываю этот код с простой кнопкой, которая вызывает эту функцию.

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

Ошибка: Ошибка домена = NSURLErrorDomain Код = -999 "отменен" UserInfo = {NSErrorFailingURLKey = https://localhost: 4443/api/v0/login/salt, NSLocalizedDescription = отменен, NSErrorFailingURLStringKey = https://localhost: 4443/api/v0/login/salt}

Так что мне действительно интересно, что я делаю неправильно, кто-нибудь может помочь мне в этом? Благодаря

ИЗМЕНИТЬ:

Это хороший способ сохранить менеджера в собственности, или я делаю что-то неправильно? Если это хороший способ, это, похоже, не работает Спасибо за помощь

.h файл

@property (nonatomic, retain) AFHTTPSessionManager *session;

.m file

@synthesize session;
- (IBAction)log:(id)sender {
NSURL *mailserver = [NSURL URLWithString:@"https://localhost:4443/"];

self.session = [[AFHTTPSessionManager alloc]initWithBaseURL:mailserver];
self.session.securityPolicy.allowInvalidCertificates = TRUE;
self.session.responseSerializer = [AFJSONResponseSerializer serializer];
self.session.requestSerializer = [AFJSONRequestSerializer serializer];
NSDictionary *parameters = @{@"username": @"testtest"};

[self.session POST:@"api/v0/login/salt" parameters:parameters success:^(NSURLSessionDataTask *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);
} failure:^(NSURLSessionDataTask *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];
4b9b3361

Ответ 1

В моем случае iOS 9 SDK " Безопасность транспортного средства приложения] вызывает AFNetworking код ошибки: -999. Если вы пытаетесь связаться с сервером, на котором нет ключей для добавления SSL, таких как снимок экрана ниже.

введите описание изображения здесь

Ответ 2

В моем случае iOS 10 SDK вызвал код ошибки AFNetworking -999. Если вы пытаетесь подключиться к серверу с SSL и не хотите его проверять, добавьте политику конфиденциальности в сеть Afaetworking

AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
securityPolicy.allowInvalidCertificates = YES;

[securityPolicy setValidatesDomainName:NO];

Ответ 3

Эта ошибка -999, а не 999. Это NSURLErrorCancelled. Ваш запрос был отменен до его завершения.

Посмотрев на свой код, вы не сохраняете AFHTTPSessionManager *manager в любом месте. Это означает, что менеджер будет удален, как только +simpleRequest вернется. Я предполагаю, что это то, что отменяет ваш запрос.

Вам нужно сохранить менеджера так, чтобы он работал на всю продолжительность запроса. Сохраните его в каком-либо свойстве.

Ответ 4

Я заметил, что конечная точка API указывает на безопасное соединение:

HTTP S://локальный: 4443/API/v0/Логин/соль

Просто попробуйте на всякий случай, возможно, это повторит вашу ситуацию.

В моем случае это была опечатка в коде менеджера API. Который из части можно сказать, связан с настройками безопасности транспорта приложений.

Просто изменил защищенный протокол с httpS:// на http:// и ошибку:

Код NSURLErrorDomain = -999 "отменен"

не было и все это работало!

+ И если у вас была аналогичная проблема. Обязательно обсудить это со специалистом по поддержке, который занимается настройкой сервера или API для вашего приложения. Это означает, что сервер не имеет действительных сертификатов безопасности. Возможно, вам по-прежнему требуется безопасное соединение. Или этот специалист может снова настроить все от http:// до httpS://, и я не уверен (не проверял), будет ли это работать снова, когда в коде вы уже используете незащищенное соединение http://.

Ответ 5

[В оригинальном OP-вопросе, возможно, не упоминается Cordova, но эта ссылка была очень высокой в результатах поиска при поиске этой проблемы в Google]

Оказывается, для моего проекта Cordova (или аналогичного) это была проблема с плагином. Убедитесь, что вы не пропустили никаких плагинов и убедитесь, что они установлены правильно, без проблем.

Самый простой способ убедиться в этом - просто начать заново, воссоздав проект Cordova (cordova create <path>) вместе с необходимыми платформами (cordova platform add <platform name>) и добавив каждый плагин с подробным флагом (--verbose), чтобы что вы можете увидеть, если что-то пошло не так в журнале консоли во время загрузки плагина, добавления его в проект и установки для каждой платформы (cordova plugin add cordova-plugin-device --verbose)

Резюме: cordova create <path> cordova platform add <platform name> cordova plugin add cordova-plugin-device --verbose