错误==数据无法读取,因为它的格式不正确。当我使用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
要求,我会成功。
我不知道,如果表单数据的原因。
我找到你的邮递员的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);
}];
以何种格式错误是什么呢? – vadian
@vadian我将'serializer'设置为'utf-8',仍然出错。 –
'utf8'不是格式。 – vadian