iOS开发问题

2021-07-11  本文已影响0人  Mi欧阳

AFNetworking的body如何传json类型

parameters加入body中,UTF-8格式

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//发送类型(二进制格式)
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
//接收类型(二进制格式)
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//超时时间
manager.requestSerializer.timeoutInterval = 20.0;

[manager PUT:URLString parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    //查看body内容,data转string
    if(task.originalRequest.HTTPBody != nil){
        NSString *str = [[NSString alloc] initWithData:task.originalRequest.HTTPBody encoding:kCFStringEncodingUTF8];
        NSLog(@"成功,打印httpBody:%@", str);
    }
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    //查看body内容,data转string
    if(task.originalRequest.HTTPBody != nil){
        NSString *str = [[NSString alloc] initWithData:task.originalRequest.HTTPBody encoding:kCFStringEncodingUTF8];
        NSLog(@"成功,打印httpBody:%@", str);
    }
}];

parameters加入body中,JSON格式

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//发送类型(JSON格式)
manager.requestSerializer = [AFJSONRequestSerializer serializer];
//接收类型(二进制格式)
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//超时时间
manager.requestSerializer.timeoutInterval = 20.0;
//写与不写对最终结果不造成影响
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
//写与不写对最终结果不造成影响
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];

[manager PUT:URLString parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    //查看body内容,json解析
    if(task.originalRequest.HTTPBody != nil){
        NSString *str = [NSJSONSerialization JSONObjectWithData:task.originalRequest.HTTPBody options:0 error:nil];
        NSLog(@"成功,打印httpBody:%@", str);
    }
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    //查看body内容,json解析
    if(task.originalRequest.HTTPBody != nil){
        NSString *str = [NSJSONSerialization JSONObjectWithData:task.originalRequest.HTTPBody options:0 error:nil];
        NSLog(@"成功,打印httpBody:%@", str);
    }
}];

附:一种错误的写法

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//发送类型(二进制格式)
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
//接收类型(二进制格式)
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//超时时间
manager.requestSerializer.timeoutInterval = 20.0;
//这里一旦多加这句,就会造成400错误。数据解析失败。AFNetworking没法正常解析需发送的body
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

[manager PUT:URLString parameters:parameters success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    //查看body内容,data转string
    if(task.originalRequest.HTTPBody != nil){
        NSString *str = [[NSString alloc] initWithData:task.originalRequest.HTTPBody encoding:kCFStringEncodingUTF8];
        NSLog(@"成功,打印httpBody:%@", str);
    }
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    //查看body内容,data转string
    if(task.originalRequest.HTTPBody != nil){
        NSString *str = [[NSString alloc] initWithData:task.originalRequest.HTTPBody encoding:kCFStringEncodingUTF8];
        NSLog(@"成功,打印httpBody:%@", str);
    }
}];

上一篇下一篇

猜你喜欢

热点阅读