iOS-95-网络请求方式汇总(包含AFNetworking、NSMutableURLRequest)

来源:互联网 发布:康涅狄格学院知乎 编辑:程序博客网 时间:2024/06/14 19:55

文章包涵AFNetworking、NSMutableURLRequest两种请求方式:get、post、上传图片、解决上传base64编码图片过长问题(使用【2、post  第一种配置】即可解决)

比如报错:err:Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: too long (414)" 


一、AFNetworking篇

1、get

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//申明返回的结果是json类型manager.responseSerializer=[AFJSONResponseSerializer serializer];//申明请求的数据是json类型manager.requestSerializer=[AFJSONRequestSerializer serializer];manager.responseSerializer = [AFHTTPResponseSerializer serializer];//    [self.HUD showLoading];//请求时带请求头[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];// 设置headerNSString *header = @"自定义header格式";[manager.requestSerializer setValue:header forHTTPHeaderField:kHeaderKey];__weak typeof(self) weakSelf = self;[manager GET:url parameters:nil progress:^(NSProgress * _Nonnull uploadProgress) {    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {        NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];    NSLog(@"+++++%@",result);    NSDictionary *dic = [weakSelf dictionaryWithJsonString:result];    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {    }];

2、post  第一种配置

NSString *url = @"http://···········";// 特别说明:像base64编码后的图片比较大,使用这种方式即可NSDictionary *paramDic = @{                           @"base64Str":imageStr,                           @"number":@"12344",                           @"name":name,                           @"key":@"key",                           };AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];manager.responseSerializer = [AFHTTPResponseSerializer serializer];__weak typeof(self)  weakself = self;manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain",@"image/png",nil];[self.HUD showLoading];[manager POST:url parameters:paramDic success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {    NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];    NSLog(@"+++++%@",result);    NSDictionary *object = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:nil];} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {    NSLog(@"++++++   %@",error);}];

3、post 第二种配置。  与【2】基本一致

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//申明返回的结果是json类型manager.responseSerializer=[AFJSONResponseSerializer serializer];//申明请求的数据是json类型manager.requestSerializer=[AFJSONRequestSerializer serializer];//请求时带请求头__weak typeof(self) weakself = self;[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];[manager POST:URL parameters:nil progress:^(NSProgress * _Nonnull uploadProgress) {} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {    }];

4、post  上传图片

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];//申明返回的结果是json类型manager.responseSerializer = [AFHTTPResponseSerializer serializer];manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain",@"image/png",nil];//提交数据及文件(图片、其他格式文件)[manager POST:kAddFeedbackURL parameters:param constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {    // 在此处添加要发送的文件   (原理:block回调)    [formData appendPartWithFileData:nil name:nil fileName:nil mimeType:@"application/octet-stream; charset=UTF-8"]; //image/jpeg    [formData appendPartWithFileData:photoData2 name:@"img2" fileName:fileName2 mimeType:@"image/jpeg"];}     progress:^(NSProgress * _Nonnull uploadProgress) {         // 进度条          NSLog(@"service progress...");     }      success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {          if (responseObject != nil) {              NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];                        }      }      failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {            NSLog(@"POST Error: %@", error.description);      } ];




二、原生方法:NSMutableURLRequest、NSURLSessionDataTask

// 1.创建一个网络路径NSURL *url = [NSURL URLWithString:@"http://----"];// 2.创建一个网络请求,分别设置请求方法、请求参数NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:url];request.HTTPMethod = @"POST";NSString *args = [NSString stringWithFormat:@"memberId=%@&content=%@",PhoneNumber,content];request.HTTPBody = [args dataUsingEncoding:NSUTF8StringEncoding];// 设置headerNSString *header = @"自定义header格式";[request setValue:header forHTTPHeaderField:kHeaderKey];// 3.获得会话对象NSURLSession *session = [NSURLSession sharedSession];// 4.根据会话对象,创建一个Task任务__weak typeof(self) weakSelf = self;[self.HUD showLoading];NSURLSessionDataTask *sessionDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {        NSLog(@"从服务器获取到数据");    /*     对从服务器获取到的数据data进行相应的处理.     */    //        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:(NSJSONReadingMutableLeaves) error:nil];    NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];    NSLog(@"+++++%@",result);    NSDictionary *dic = [weakSelf dictionaryWithJsonString:result];        [self performSelectorOnMainThread:@selector(handleResponeDetailInfo:) withObject:dic waitUntilDone:NO];}];//5.最后一步,执行任务,(resume也是继续执行)。[sessionDataTask resume];











阅读全文
0 0
原创粉丝点击