iOS开发 --- AFNetworking 进行封装(POST请求遇到的问题)
2018-01-05 16:19
495 查看
前言:
最近在写大量text文本上传功能,再用GET请求就会报404....,所以就要用POST请求了,因为GET请求对URL的长度有限制...
一,POST发送请求有两种形式:
1,发送纯文本的内容
2,发送的body部分带有文件(图片,音频或者二进制数据)
对应的Content - Type有两种:
1,application/x-www-form-urlencoded
2,multipart/form-data
今天主要讲的是POST发送请求的第一种方式:发送纯文本的内容
问题分析:
第1句代码:
这样写的话后面第8句代码就要把url写全;
也可以写成
1,AFHTTPRequestSerializer:普通的http的编码格式就是
2,AFJSONRequestSerialize:是json编码格式的,也就是编码成:
3,AFPropertyListRequestSerializer:但是看介绍接编码成pislt格式的参数
第3句代码:
1,AFHTTPResponseSerializer:直接使用服务器应该返回的数据,不做任何解析,我们接收到数据自己做转换;
2,AFXMLParserResponseSerializer:告诉服务器以xml形式返回数据;
3,AFJSONResponseSerializer:以json形式返回数据,默认是该样式;
第5句代码:
第6句代码:
第7句代码:
设置请求超时时间;
发送请求
params:
参考文章:
1,专为新手写的:关于IOS HTTP请求的问题和常报的几个错,AFNetworking版
最近在写大量text文本上传功能,再用GET请求就会报404....,所以就要用POST请求了,因为GET请求对URL的长度有限制...
一,POST发送请求有两种形式:
1,发送纯文本的内容
2,发送的body部分带有文件(图片,音频或者二进制数据)
对应的Content - Type有两种:
1,application/x-www-form-urlencoded
2,multipart/form-data
今天主要讲的是POST发送请求的第一种方式:发送纯文本的内容
//发送一个POST请求 - (void)postTest:(NSString *)url params:(NSDictionary *)params success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure;
//发送一个POST请求 - (void)postTest:(NSString *)url params:(NSDictionary *)params success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure{ AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]init]; manager.requestSerializer = [AFHTTPRequestSerializer serializer]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil]; //默认:application/x-www-form-urlencoded [manager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; manager.requestSerializer.timeoutInterval = outTime; [manager POST:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { if (success) { success(responseObject); } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { if (failure) { failure(error); } }]; }
问题分析:
第1句代码:
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]init];
这样写的话后面第8句代码就要把url写全;
也可以写成
AFHTTPSessionManager *session = [[AFHTTPSessionManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://192.168.1.1/"]];第2句代码:
manager.requestSerializer = [AFHTTPRequestSerializer serializer];这句是发送请求的序列化,分3种编码格式:如果是POST方式,就用第一个AFHTTPRequestSerializer;
1,AFHTTPRequestSerializer:普通的http的编码格式就是
mid=10&method=userInfo&dateInt=20160818,这种格式的。
2,AFJSONRequestSerialize:是json编码格式的,也就是编码成:
{"mid":"11","method":"userInfo","dateInt":"20160818"}
3,AFPropertyListRequestSerializer:但是看介绍接编码成pislt格式的参数
第3句代码:
manager.responseSerializer = [AFHTTPResponseSerializer serializer];这句是接收端的序列化,也有3中方式:
1,AFHTTPResponseSerializer:直接使用服务器应该返回的数据,不做任何解析,我们接收到数据自己做转换;
2,AFXMLParserResponseSerializer:告诉服务器以xml形式返回数据;
3,AFJSONResponseSerializer:以json形式返回数据,默认是该样式;
第5句代码:
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];
第6句代码:
[manager.requestSerializer setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
第7句代码:
设置请求超时时间;
manager.requestSerializer.timeoutInterval = outTime;第8句代码:
发送请求
params:
[manager POST:url parameters:params progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { if (success) { success(responseObject); } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { if (failure) { failure(error); } }];
参考文章:
1,专为新手写的:关于IOS HTTP请求的问题和常报的几个错,AFNetworking版
相关文章推荐
- iOS开发:GET与POST接口网络请求以及对AFNetworking的二次封装
- iOS开发 - 登陆post请求遇到的问题
- iOS开发工具-如何使用网络封包分析工具Charles,通过配置proxy对http、https、tcp、udp 等协议的请求响应过程交互信息进行分析、判断、解决我们移动开发中的遇到的各种实际问题。
- iOS开发之网络请求(基于AFNetworking的再封装)
- iOS---iOS开发零基础教程之AFNetWorking POST 队列请求
- iOS开发 AFNetworking 3.0使用遇到的问题
- iOS 开发 AFNetworking3.0源码解析(一:结构图/网络请求三次封装/上传下载/网络监测)
- iOS 开发 https问题使用AFN进行网络请求时做的一些配置
- ionic+nodejs开发遇到的跨域和post请求数据问题
- IOS 开发 AFNetworking 网络工具-网络请求的三次封装 OC版
- iOS开发 AFNetworking 3.0使用遇到的问题补充
- iOS开发——post异步网络请求封装
- IOS 开发 AFNetworking 网络工具-网络请求的三次封装 Swift版
- 转载:ionic+nodejs开发遇到的跨域和post请求数据问题
- iOS开发零基础教程之AFNetWorking POST 队列请求
- IOS 开发AFNetworking 3.0 遇到的问题
- iOS开发 AFNetworking 3.0使用遇到的问题补充
- iOS开发之网络请求(基于AFNetworking的再封装)
- iOS开发 AFNetworking 3.0使用遇到的问题补充
- 转载:iOS开发零基础教程之AFNetWorking POST 队列请求