美文网首页
iOS 关于AFNetworking报错

iOS 关于AFNetworking报错

作者: 达_Ambition | 来源:发表于2019-06-06 11:07 被阅读0次
    1、"Request failed: internal server error (500)"

    1⃣️、一般先看自己的看 AFHTTPSessionManager 初始化是否正确

    - (AFHTTPSessionManager *)manager {
        if (!_manager) {
            
            _manager = [MUHTTPSessionManager sharedHTTPSession]; // 自己实现的单例
            
            _manager = [[APIClient alloc] initWithBaseURL:[NSURL URLWithString:API_BASE_URL]];
            
            _manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // 响应
            
            _manager.requestSerializer = [AFHTTPRequestSerializer serializer]; // 请求
            
            // 响应类型
            [_manager.requestSerializer setValue:APP_key forHTTPHeaderField:@"APP_key"];
            _manager.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", @"text/plain", nil];
     
        }
        
        return _manager;
    }
    

    2⃣️、如果自己这边没有发现问题的话,很有可能是后台数据处理的问题了,这时候就要跟后台人员说下了,或者进行联调,毕竟做一个团队是需要及时沟通协调的!

    2、Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/html"

    1⃣️、此错误意思是不能接收的返回值类型:text/html,即服务器返回了一个text/html类型的返回值。出现原因为AFN本身不能接受这种类型,默认接收类型只有application/json,text/json,text/javascript三种。
    解决方案:为AFN添加此接收类型:self.acceptableContentTypes 在里面添加@"text/html",@"text/plain",这样就可以解决-1016的错误了

    AFURLResponseSerialization.m  文件中
    //找到此行    
    self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];
    //修改为
    self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html",@"text/plain" nil];
    
    3、NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set."

    1⃣️、错误意思是Json并不是以array或者object开始的,换句话说即json的格式不正确。
    出现原因是服务器返回的数据并非Json,但是AFN却当成Json去强行解析,那报错就不足为奇了。
    manager.responseSerializer 的初值[supersetResponse Serializer:responseSerializer];默认是json

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //加上这一句即可
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    

    2⃣️、如果以AFHTTPResponseSerializer解析的话就不会报错,此时可以把返回的Data数据转成string,看一下实际的数据。

    [self.manager POST:URLStr parameters:param progress:^(NSProgress * _Nonnull uploadProgress) {
                } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
                   
           NSString *nameStr =  [[NSString alloc]initWithData: responseObject encoding:NSUTF8StringEncoding];
    }];
    

    相关文章

      网友评论

          本文标题:iOS 关于AFNetworking报错

          本文链接:https://www.haomeiwen.com/subject/pqmbzqtx.html