Ios 请求错误代码为999的AFN网络
我是objective-c的新手,我和AFC的关系很不好 所以问题是,我想向服务器发出一个简单的POST请求,服务器会给我发回一个salt。 为了测试我的请求,我制作了一个简单的应用程序,但我不明白为什么我会得到错误代码999 这里是我的代码示例Ios 请求错误代码为999的AFN网络,ios,objective-c,afnetworking,rubymotion,Ios,Objective C,Afnetworking,Rubymotion,我是objective-c的新手,我和AFC的关系很不好 所以问题是,我想向服务器发出一个简单的POST请求,服务器会给我发回一个salt。 为了测试我的请求,我制作了一个简单的应用程序,但我不明白为什么我会得到错误代码999 这里是我的代码示例 + (void)simpleRequest; { NSURL *mailserver = [NSURL URLWithString:@"https://localhost:4443/"]; AFHTTPSessionManager *
+ (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 motion中,使用这个函数我可以毫无错误地得到响应。但是这个简单的应用程序我不能做任何请求,他们都返回了这个错误代码999
错误:错误域=nsurErrorDomain代码=-999“已取消”
UserInfo={NSErrorFailingURLKey=,,
NSLocalizedDescription=已取消,
NSErrorFailingURLStringKey=}
所以我真的想知道我做错了什么,有人能帮我吗?
谢谢
编辑:
这是拯救物业经理的好方法还是我做错了什么?
如果这是个好办法,这似乎不起作用
谢谢你的帮助
.h文件
.m文件
那是错误-999,不是999。即
n错误已取消
。您的请求在完成之前已被取消
查看您的代码,您没有在任何地方保留AFHTTPSessionManager*manager
。这意味着只要+simpleRequest
返回,管理器就会被释放。我猜这就是取消你请求的原因
您需要保存管理器,使其在整个请求期间都有效。将其保存在某个属性中。在我的案例中,iOS 9 SDK的“应用程序传输安全性”“原因AFNetworking错误代码:-999。
如果您试图访问一个没有SSL的服务器,请添加如下屏幕截图所示的密钥
在我的例子中,iOS 10 SDK导致AFNetworking错误代码-999。如果您试图访问具有SSL的服务器,但不想签出它,请向Afnetworking添加一些隐私策略
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
securityPolicy.allowInvalidCertificates = YES;
[securityPolicy setValidatesDomainName:NO];
我注意到您的API端点指示安全连接: httpS://localhost:4443/api/v0/login/salt 试一试,以防万一,也许它会重复你的情况 在我的例子中,这是API管理器代码中的一个输入错误。从这一部分可以说是连接了应用程序传输安全设置 刚刚将受保护协议从
httpS://
更改为http://
,错误为:
NSURErrorDomain代码=-999“已取消”
他走了,一切都正常了
+如果你有类似的问题。请务必与负责应用程序服务器或API配置的后端专家讨论此问题。这意味着服务器没有有效的安全证书。也许你仍然需要一个安全的连接。或者,这位专家可以再次将所有内容从
http://
配置回httpS://
,我不确定(没有检查)当您在代码中已经使用不安全的http://
连接时,这是否会再次起作用。[最初的OP问题可能没有提到Cordova,但在谷歌搜索该问题时,该链接在搜索结果中的位置非常高]
对于我的Cordova项目(或类似项目),这是一个插件问题。。请确保没有丢失任何插件,并确保它们安装正确,没有问题
验证这一点的最简单方法是重新开始,重新创建Cordova项目(Cordova create
)以及所需的平台(Cordova platform add
),并添加每个带有详细标志(--verbose)的插件这样,在下载插件、将插件添加到项目并为每个平台安装插件时,您可以查看控制台日志中是否出现任何错误(cordova插件添加cordova插件设备--verbose
)
概述:
cordova create
cordova平台添加
cordova plugin add cordova plugin device--verbose
显示您的URL有误…可能应该将localhost转换为您的IP地址?有时参数会出现在请求正文中,而参数字段为零:就像我刚才尝试过的,但不起作用,至少感谢您的帮助在我的情况下,应该是这样的请求“,这是在我的另一个应用程序中被罚款的工作。我在谷歌上搜索了一些,他们说这是因为前一个请求没有完成,而另一个发送了,因此你得到了取消的错误。我想我已经正确地保存了经理,但仍然失败,我错过了什么吗?@xikimay那么这是因为拥有你的财产的实例是dein在响应返回之前初始化。黑客可能会调用块内的管理器(通过Log()
)例如,稍微增加一点上下文,比如在何处分配此安全策略,或者它是否为单例,等等,都会有帮助。这个答案本身并不足够。Fwiw,这个答案的前提是有用的——在会话管理器上设置安全策略确实有帮助(至少在我的情况下)。\u sessionManager=[[AFURLSessionManager alloc]initWithSessionConfiguration:_sessionConfiguration];AFSecurityPolicy*securityPolicy=[AFSecurityPolicyWithPinningMode:AFSSLPiningModeNone];securityPolicy.allowInvalidCertificates=YES;[securityPolicy setValidatesDomainName:NO]u sessionManager.securityPolicy=securityPolicy;我收到一个关于afsslpiningmodenone
不明确的错误(AFNetworking 3.1)(使用内部调用相同内容的[AFSecurityPolicy defaultPolicy]
解决了此问题)。这并没有完全起作用,现在收到了此警告:“为了验证自签名证书的域名,您必须使用固定”。这应该不再是一个可接受的答案。从iOS 10开始,允许套利
@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);
}];
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
securityPolicy.allowInvalidCertificates = YES;
[securityPolicy setValidatesDomainName:NO];