错误==数据无法读取,因为它的格式不正确。当我使用AFNetworking要求

问题描述:

当我请求网络:错误==数据无法读取,因为它的格式不正确。当我使用AFNetworking要求

[Mysevers AFPOSTWithHud:YES andAddressname:@"Common/Currency/Register" parmas:params RequestSuccess:^(id result) { 

    if ([result[@"status"] intValue] == 200) { 

     [SVProgressHUD showSuccessWithStatus:@"注册成功"]; 

     UIViewController *temp_vc = nil; 

     for (UIViewController *vc in self.navigationController.childViewControllers) { 

      if ([vc isKindOfClass:[HomeVC class]]) { 

       temp_vc = vc; 
       break; 
      } 
     } 

     if (temp_vc == nil) { 
      return; 
     } 

     [self.navigationController popToViewController:temp_vc animated:YES]; 

    }else { 

     [SVProgressHUD showErrorWithStatus:@"注册失败"]; 
    } 

} failBlcok:^{ 
    SVNoNet; 
}]; 

我得到的错误,当我要求网络:

[Mysevers AFPOSTWithHud:andAddressname:parmas:RequestSuccess:failBlcok:] _block_invoke.47] [行号:57]错误==数据无法读取,因为它的格式不正确。

Mysevers代码如下:

@implementation Mysevers 

+ (AFHTTPSessionManager *)sharedHTTPSession{ 
    static dispatch_once_t onceToken; 
    static AFHTTPSessionManager *requestManager ; 
    dispatch_once(&onceToken, ^{ 
     requestManager = [AFHTTPSessionManager manager]; 
     requestManager.requestSerializer.timeoutInterval = 10; 
     requestManager.requestSerializer = [AFJSONRequestSerializer serializer]; // 添加,否则会返回500错 
     requestManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil]; 
    }); 
    return requestManager; 
} 


+(void)AFPOSTWithHud:(BOOL)hud andAddressname:(NSString*)addressName parmas:(NSDictionary*)parmas RequestSuccess:(void(^)(id result))success failBlcok:(void(^)(void))failBlcok 
{ 
    if (hud) { 
     //[HUD addHUD]; 

     [SVProgressHUD show]; 
    } 

    AFHTTPSessionManager *requestManager = [Mysevers sharedHTTPSession]; 
    //requestManager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; 

    NSString *urlStr = [NSString stringWithFormat:@"%@%@",BASE_URL,addressName]; 
    DLog(@"%@",urlStr); 

    [requestManager POST:urlStr parameters:parmas progress:^(NSProgress * _Nonnull uploadProgress) { 

    } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
     if (hud) { 
      //[HUD removeHUD]; 
      [SVProgressHUD dismiss]; 
     } 
     success(responseObject); 
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 

     if (error != nil) { 
      DLog(@"error==%@",[error localizedDescription]); 
      if (hud) { 
       //[HUD removeHUD]; 
       [SVProgressHUD dismiss]; 
      } 
      failBlcok(); 
     } 


     return ; 
    }]; 


} 

注意,我acceptableContentTypes低于:

requestManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil] 

更新

更改我的sharedHTTPSession这样:

+ (AFHTTPSessionManager *)sharedHTTPSession{ 
    static dispatch_once_t onceToken; 
    static AFHTTPSessionManager *requestManager ; 
    dispatch_once(&onceToken, ^{ 
     requestManager = [AFHTTPSessionManager manager]; 
     requestManager.requestSerializer.timeoutInterval = 10; 
     AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer]; 
     [serializer setStringEncoding:NSUTF8StringEncoding]; 
     requestManager.requestSerializer=serializer; 
     //requestManager.requestSerializer = [AFJSONRequestSerializer serializer]; // 添加,否则会返回500错 
     requestManager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil]; 
    }); 
    return requestManager; 
} 

仍然得到这个错误。

PHPer打印$_POST,它是一个空数组。


(lldb) po result 
{ 
    data = ""; 
    msg = 2001; 
    status = 400; 
} 

结果是PHPer返回到我的msg是他定义,只是$_POST是空的。


注意-2

在我AFHTTPSessionManager.m,我添加了一行请求头:

#pragma mark - add by me 

     [request addValue:API_KEY forHTTPHeaderField:@"PUBLICKEY"]; 

在我AFHTTPSessionManager.m

- (NSURLSessionDataTask *)dataTaskWithHTTPMethod:(NSString *)method 
             URLString:(NSString *)URLString 
             parameters:(id)parameters 
            uploadProgress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgress 
           downloadProgress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgress 
             success:(void (^)(NSURLSessionDataTask *, id))success 
             failure:(void (^)(NSURLSessionDataTask *, NSError *))failure 
{ 
    NSError *serializationError = nil; 
    NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:method URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError]; 

#pragma mark - add by me 

    [request addValue:API_KEY forHTTPHeaderField:@"PUBLICKEY"]; 

    if (serializationError) { 
     if (failure) { 
#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wgnu" 
      dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ 
       failure(nil, serializationError); 
      }); 
#pragma clang diagnostic pop 
     } 

     return nil; 
    } 

    __block NSURLSessionDataTask *dataTask = nil; 
    dataTask = [self dataTaskWithRequest:request 
          uploadProgress:uploadProgress 
         downloadProgress:downloadProgress 
         completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) { 
     if (error) { 
      if (failure) { 
       failure(dataTask, error); 
      } 
     } else { 
      if (success) { 
       success(dataTask, responseObject); 
      } 
     } 
    }]; 

    return dataTask; 
} 

更新-3

我把所有的打印信息,以下面:

2017年5月6日18:03:31.685086 KYGM [15582:531703] [MC]系统组systemgroup容器.com.apple.configurationprofiles路径是/Users/luowensheng/Library/Developer/CoreSimulator/Devices/2FACECB7-2E7A-4E8C-8AF5-179ED7344D93/data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
2017- 05-06 18:03:31.686106 KYGM [15582:531703] [MC]从私人有效用户设置中读取。
2017-05-06 18:03:39.568 KYGM [15582:531703] [文件名:/用户/ luowensheng/Desktop/company_project/KYGM/KYGM/Utils/LML/LMLUtils/Mysevers。米] [函数名:+ [Mysevers AFPOSTWithHud:andAddressname:parmas:RequestSuccess:failBlcok:]] [行号:47] http://192.168.3.103:8003/Common/Currency/Register


更新-04

如果我使用postman要求,我会成功。

enter image description here

我不知道,如果表单数据的原因。

+0

以何种格式错误是什么呢? – vadian

+0

@vadian我将'serializer'设置为'utf-8',仍然出错。 –

+0

'utf8'不是格式。 – vadian

我找到你的邮递员的PARAM数据类型是form-data,所以我觉得你应该使用AFNetworking的形式提交方法:

试试下面的代码:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 

    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", @"text/html", nil]; 

    NSDictionary *params = @{ 
          @"UserName":@"admin5", 
          @"Password":@"123456" 
          }; 


    [manager POST:@"your url" parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { 

     NSLog(@"formData=%@", formData); 

    } progress:^(NSProgress * _Nonnull uploadProgress) { 

    } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 

     NSLog(@"responseObject=%@", responseObject); 

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
     NSLog(@"error=%@", error); 
    }];