私は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);
}];
}
この関数を呼び出している単純なボタンにこのコードをリンクしました。
私は他のアプリを持っています、Rubyこの機能で動作する動きはエラーなしで応答を得ることができます。しかし、このシンプルなアプリではリクエストを行うことができません。エラーコード999。
エラー:Error Domain = NSURLErrorDomain Code = -999 "cancelled" UserInfo = {NSErrorFailingURLKey = https:// localhost:4443/api/v0/login/salt 、NSLocalizedDescription = cancelled、NSErrorFailingURLStringKey = https:// localhost:4443/api/v0/login/salt }
だから私は本当に私が間違っているのか疑問に思っています、誰もこれで私を助けることができますか?ありがとう
編集:
マネージャーをプロパティに保存するのに良い方法ですか、何か間違っていますか?それが良い方法であれば、これはうまくいかないようです
.hファイル
@property (nonatomic, retain) AFHTTPSessionManager *session;
.mファイル
@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);
}];
私の場合、iOS 10 SDKによりAFNetworkingエラーコード-999が発生しました。 SSLを備えたサーバーにアクセスしようとしていて、チェックアウトしたくない場合は、プライバシーポリシーをAfnetworkingに追加します
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
securityPolicy.allowInvalidCertificates = YES;
[securityPolicy setValidatesDomainName:NO];
これは999ではなく-999のエラーです。それはNSURLErrorCancelled
です。リクエストは完了する前にキャンセルされました。
コードを見ると、AFHTTPSessionManager *manager
どこでも。これは、マネージャーが+simpleRequest
戻り値。これがあなたのリクエストをキャンセルしているのだと思います。
マネージャーは、リクエストの全期間にわたって存続するように保存する必要があります。どこかのプロパティに保存します。
APIエンドポイントが安全な接続を示していることに気付きました。
http [〜#〜] s [〜#〜]:// localhost:4443/api/v0/login/salt
念のために試してみてください、多分あなたの状況を繰り返します。
私の場合、これはタイプミスでした APIマネージャーコード。どちらが言えるかは、App Transport Security Settingsに関連しています。
保護されたプロトコルをhttpS://
からhttp://
に変更したところ、エラー:
NSURLErrorDomain Code = -999 "キャンセル"
なくなっていたそれはすべてうまくいった!
+また、同様の問題が発生した場合。 バックエンドのスペシャリストと議論してくださいアプリケーションまたはサーバーのAPI構成を誰が処理するかを確認してください。これは、サーバーに有効なセキュリティ証明書がないことを意味します。おそらく、まだ安全な接続が必要です。または、このスペシャリストは、http://
からhttpS://
までのすべてを再度構成できますが、コードで既に安全でないhttp://
接続を使用しているときに、これが再び機能するかどうかはわかりません(チェックしませんでした)。
[元のOPの質問にはCordovaが記載されていない可能性がありますが、この問題をグーグルで検索すると、このリンクは検索結果で非常に高くなりました]
私のCordovaプロジェクト(または同様の)では、プラグインの問題でした。プラグインが欠落していないことを確認し、問題なく適切にインストールされていることを確認してください。
これを確認する最も簡単な方法は、単にCordovaプロジェクトの再作成(cordova create <path>
)必要なプラットフォーム(cordova platform add <platform name>
)プラグインのダウンロード、プロジェクトへの追加、各プラットフォームへのインストール(cordova plugin add cordova-plugin-device --verbose
)
要約:cordova create <path>
cordova platform add <platform name>
cordova plugin add cordova-plugin-device --verbose