Ios 请求错误代码为999的AFN网络

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 *

我是objective-c的新手,我和AFC的关系很不好

所以问题是,我想向服务器发出一个简单的POST请求,服务器会给我发回一个salt。 为了测试我的请求,我制作了一个简单的应用程序,但我不明白为什么我会得到错误代码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 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];