[英]error==The data couldn’t be read because it isn’t in the correct format. When I use AFNetworking to request
當我請求網絡時:
[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] error ==由於格式不正確,無法讀取數據。
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-05-06 18:03:31.685086 KYGM [15582:531703] [MC] systemgroup.com.apple.configurationprofiles路徑的系統組容器為/ Users / luowensheng / Library / Developer / CoreSimulator / Devices / 2FACECB7-2E7A-4E8C -8AF5-179ED7344D93 /數據/容器/共享/ 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] [文件名:/Users/luowensheng/Desktop/company_project/KYGM/KYGM/Utils/LML/LMLUtils/Mysevers.m] [函數名:+ [Mysevers AFPOSTWithHud:andAddressname:parmas:RequestSuccess:failBlcok:]] [行號:47] http://192.168.3.103:8003/Common/Currency/Register
更新-04
如果我使用postman
的要求,我將成功。
我不知道表單數據是否是原因。
我發現您的郵遞員的param-data類型是form-data
,所以我認為您應該使用AFNetworking的form-submit方法:
試試下面的代碼:
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);
}];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.