iOS AFnetworking post请求 直接post上去一个json格式的数据 报Domain=com.alamofire.error.serialization.response Code=

博客内容讲述了在使用AFNetworking进行POST请求时遇到401未经授权的错误。问题出在没有将token正确地添加到请求中。通过查看安卓端的实现,发现它们会自动将token拼接到URL后面。为了解决这个问题,iOS开发者需要手动将token添加到请求参数中,修正后的代码能够成功发送携带token的POST请求。
这两天调接口,后台让使用post请求,直接post上去一个json串,有token验证,整了好久,没有调成功,先上原来旧代码:

   NSMutableDictionary * parameters = [NSMutableDictionary dictionaryWithCapacity:1];

/*

*参数在这里省去

/

    AFHTTPSessionManager* sessionManager = [AFHTTPSessionManager manager];
    sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
    sessionManager.requestSerializer.timeoutInterval = requestTime;  //设置请求超时时间
    sessionManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain", nil];
 
    [sessionManager POST:[NSString stringWithFormat:@"%@api/v1/dog/dognewborn",URL_NEWGAME] parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {
    
        NSLog(@"%@",responseObject);
        NSLog(@"mag = %@",[responseObject objectForKey:@"msg"]);
    
        
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        failure(task,error);
        NSLog(@"error= %@",error);

        long flag = error.code;
        switch (flag) {
            case -1009:
                [MBProgressHUD showError:@"网络好像连接不上了,请重试"];
                break;
            case -1001:
                [MBProgressHUD showError:@"请求超时,请稍后重试 "];
                break;
                
            default:
                break;
        }

    }];

结果报以下错误:

Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: unauthorized (401)" UserInfo={com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x7b6023b0> { URL: http://****************/dognewborn } { status code: 401, headers {
    "Content-Length" = 0;
    Server = "Jetty(7.6.14.v20131031)";
} }, NSErrorFailingURLKey=http://******************/dognewborn, NSLocalizedDescription=Request failed: unauthorized (401), com.alamofire.serialization.response.error.data=<>}

401错误,网上提示说是没有权限访问该接口,甚是郁闷,看了安卓那边,发现他们调的接口,需要把token拼接到url后面即:[NSString stringWithFormat:@"%@api/v1/dog/dognewborn?token=%@",URL_NEWGAME,token]
安卓的网络请求框架是自动把token添加到接口后面,af需要自己拼上去,才能请求。改正后代码如下:

   NSMutableDictionary * parameters = [NSMutableDictionary dictionaryWithCapacity:1];


/*

*参数在这里省去

/


    AFHTTPSessionManager* sessionManager = [AFHTTPSessionManager manager];
    sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
    sessionManager.requestSerializer.timeoutInterval = requestTime;  //设置请求超时时间
    sessionManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain", nil];
 
    [sessionManager POST:[NSString stringWithFormat:@"%@api/v1/dog/dognewborn?token=%@",URL_NEWGAME,token] parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {
    
        NSLog(@"%@",responseObject);
        NSLog(@"mag = %@",[responseObject objectForKey:@"msg"]);
    
        
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        failure(task,error);
        NSLog(@"error= %@",error);

        long flag = error.code;
        switch (flag) {
            case -1009:
                [MBProgressHUD showError:@"网络好像连接不上了,请重试"];
                break;
            case -1001:
                [MBProgressHUD showError:@"请求超时,请稍后重试 "];
                break;
                
            default:
                break;
        }

    }];

最后请求成功,问题解决。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值