首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AFJSONRequestOperation不工作(postpath工作)

AFJSONRequestOperation不工作(postpath工作)
EN

Stack Overflow用户
提问于 2013-09-10 15:00:21
回答 2查看 325关注 0票数 0

我正在尝试使用AFNetworking发布一个JSON。

下面是我使用的代码:

代码语言:javascript
复制
+ (RESTAPI *)sharedClient
{
    static RESTAPI *_sharedClient = nil;
    static dispatch_once_t oncePredicate;
    dispatch_once(&oncePredicate, ^{
        _sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:@"https://mybaseurl.com"]];
    });

    return _sharedClient;
}

- (id)initWithBaseURL:(NSURL *)url
{
    self = [super initWithBaseURL:url];
    if (!self) {
        return nil;
    }

    [self setParameterEncoding:AFJSONParameterEncoding];
    [self registerHTTPOperationClass:[AFJSONRequestOperation class]];
    [self setDefaultHeader:@"Accept" value:@"application/json"];
    [self setAllowsInvalidSSLCertificate:YES];

    return self;
}

以下代码不起作用。每次尝试时,我都会得到以下错误:

操作无法完成。(NSURLErrorDomain错误-1012.)

代码语言:javascript
复制
// this code does not works
// 
- (void)loginNOTWORKING
{
    RESTAPI *client = [RESTAPI sharedClient];

    [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
    [[AFNetworkActivityIndicatorManager sharedManager] incrementActivityCount];

    NSDictionary *parameter = @{@"tgout": @"1",
                                @"tgin": @2,
                                @"username": @"foo",
                                @"password":@"bar"};
    NSURLRequest *request = [client requestWithMethod:@"POST" path:@"/login" parameters:parameter];

    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        // code for successful return goes here
        [[AFNetworkActivityIndicatorManager sharedManager] decrementActivityCount];
        NSLog(@"THIS IS NEVER CALLED: %@", JSON);
        // do something with return data
    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
        // code for failed request goes here
        [[AFNetworkActivityIndicatorManager sharedManager] decrementActivityCount];
        NSLog(@"SAD, VERY SAD: %@", error.localizedDescription);
        // do something on failure
    }];

    [operation start];
}

此代码适用于:

代码语言:javascript
复制
// this code WORKS
- (void)loginWORKING
{
    RESTAPI *client = [RESTAPI sharedClient];

    [[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
    [[AFNetworkActivityIndicatorManager sharedManager] incrementActivityCount];

    NSDictionary *parameter = @{@"tgout": @"1",
                                @"tgin": @2,
                                @"username": @"foo",
                                @"password":@"bar"};

    [client postPath:@"/login" parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject) {
        // Print the response body in text
        NSLog(@"IT WORKS: %@",responseObject);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Response: %@", error.localizedDescription);
    }];
}

为什么第一个登录方法不能工作?我做错什么了?

EN

回答 2

Stack Overflow用户

发布于 2013-09-10 15:15:49

试着替换

代码语言:javascript
复制
NSURLRequest *request = [client requestWithMethod:@"POST" path:@"/login" parameters:parameter];

使用

代码语言:javascript
复制
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"/*HERE THE URL STRING TO CALL*/"]]
票数 0
EN

Stack Overflow用户

发布于 2013-09-10 22:43:34

您可以在文件CFNetworkErrors.h中找到错误-1012。

代码语言:javascript
复制
kCFURLErrorUserCancelledAuthentication = -1012
"The connection failed because the user cancelled required authentication."

我想,你的认证有问题。错误描述可能对“用户”有误导性--它实际上是一个被调用的委托方法,它取消了身份验证,或者身份验证干脆失败了。

当然,这可能是由于没有正确地序列化参数造成的。我建议使用更低级别的API,手动创建请求,用NSJSONSerialization手动编码JSON,并设置正文数据和请求的URL。IMHO,这当然是更具可读性的代码,并且可能需要更少的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18722375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档