簡體   English   中英

錯誤==由於格式不正確,無法讀取數據。 當我使用AFNetworking請求

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM