我是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文件
@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);
}];
答案 0 :(得分:17)
在我的情况下,iOS 10 SDK导致AFNetworking错误代码为-999。如果您尝试访问具有SSL的服务器并且您不想查看它,请在Afnetworking中添加一些隐私政策
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
securityPolicy.allowInvalidCertificates = YES;
[securityPolicy setValidatesDomainName:NO];
答案 1 :(得分:9)
那是错误-999,而不是999.那是NSURLErrorCancelled
。您的请求在完成之前已被取消。
查看代码,您不会在任何地方保留AFHTTPSessionManager *manager
。这意味着只要+simpleRequest
返回,经理就会被处置。我猜这就是取消你的请求。
您需要保存管理器,使其在整个请求期间保持不变。将它保存在某个地方。
答案 2 :(得分:2)
答案 3 :(得分:0)
我注意到您的API端点指示安全连接:
HTTP <强>取值强>://本地主机:4443 / API / V0 /登录/盐
试试看以防万一,也许它重复你的情况。
就我而言,这是API管理器代码中的拼写错误。可以说该部分与App Transport Security Settings相关联。
刚刚将受保护的协议从httpS://
更改为http://
,错误:
NSURLErrorDomain Code = -999&#34;已取消&#34;
消失了,一切正常!
+如果你有类似的问题。请务必与后端专家讨论此问题,他们会为您的应用程序处理服务器或API配置。这意味着服务器没有有效的安全证书。也许你仍然需要一个安全的连接。或者此专家可以再次从http://
到httpS://
重新配置所有内容,并且我不确定(未检查)在您已使用非代码的代码中这是否会再次起作用安全http://
连接。
答案 4 :(得分:0)
[最初的OP问题可能没有提及Cordova,但是在搜索该问题时,该链接在搜索结果中非常高]
对于我的 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