Code&Ocean
2018-05-28 03:32
采纳率: 100%
浏览 2.2k
已采纳

iOS AFNetworking 请求返回400,如何打印后台返回信息

比如 我在某次请求的时候某个 参数忘记 带了。后台返回400 直接答应error就是bad Request ,而后台实际可能返回有提示信息,某个参数缺少等。可以直接方便调试。我该怎么在返回的task中打印后台返回的东西了

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • BingTice 2018-05-28 10:59
    已采纳

    首先要先判断错误类型,在AFNetworking的failture block回调里面

    if ([error.domain isEqualToString:AFURLResponseSerializationErrorDomain]){

    NSData *errorData = [error.userInfo objectForKey:AFNetworkingOperationFailingURLResponseDataErrorKey];

    NSString * str = [[NSString alloc]initWithData:errorData encoding:NSUTF8StringEncoding];

    NSLog(@"%@",str)

    }

    点赞 评论
  • weixin_38014997 2018-05-28 03:48

    1 找到AFNetWorking的AFURLResponseSerialization.m 文件
    2 加上#ifdef DEBUG
    NSString * const AFNetworkingOperationFailingURLResponseStringErrorKey = @"com.alamofire.serialization.response.error.string";
    #endif
    3 把 if (data) {
    mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data;
    }

        替换成  if (data) {
                    mutableUserInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] = data;
    

    #ifdef DEBUG
    mutableUserInfo[AFNetworkingOperationFailingURLResponseStringErrorKey] = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    #endif
    }
    4在网络请求的方法的 failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {// 在这里添加

      NSLog(@"error ==%@", [error userInfo][@"com.alamofire.serialization.response.error.string"]);

    } 这样以后请求数据返回的错误提示就会以字符串的行打印出来, 一看就知道是什么错误了。。。。

    点赞 评论
  • 你如星辰似朝露 2018-05-28 04:32

    用Charles直接抓包看数据

    点赞 评论
  • -逍遥剑- 2018-05-28 05:46

    抓包看看返回的报文是什么

    点赞 评论
  • qq_28038525 2018-05-28 06:20

    400 是你前端的错误! 仔细看看你的请求结构体有没有错误

    点赞 评论
  • hot2dog 2018-05-28 08:48

    400 bad request !!! 通常是 前端请求参数类型, 与后台接口规定的参数, 不匹配 导致。

    点赞 评论
  • puly 2018-05-28 08:59

    NSData * data = error.userInfo[@"com.alamofire.serialization.response.error.data"];
    NSString * str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

    str就是失败的信息

    点赞 评论
  • Code&Ocean 2018-06-21 09:27

    感谢各位的回答,最终整理了下。
    在回掉失败中添加:
    //解析出后台返回信息
    NSDictionary *errorInfo;
    if ([error userInfo][@"com.alamofire.serialization.response.error.data"]) {
    errorInfo = [NSJSONSerialization JSONObjectWithData:([error userInfo][@"com.alamofire.serialization.response.error.data"]) options:NSJSONReadingMutableLeaves error:NULL];
    }

    即可打印后台返回东西了。
    接口请求错误回掉

    点赞 评论

相关推荐 更多相似问题