前言
导入的最新版的AFNetworking3.1.0
,突然发现找不到AFHTTPRequestOperationManager
了。
刚开始以为是cocoapods没有给我导进去,后来发现也没有这NSURLConnection
了,被弃用
了,突然意识到,这个就是AFHTTPRequestOperationManager
找不到的原因了,它是基于NSURLConnection
封装的!!
于是找了一下,现在都用的是NSURLSession
了,AFNetworking
中用的是AFHTTPSessionManager
了
测试版本AFNetworking3.1.0
GET/POST请求
1 | AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; |
添加认证头
1 | [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@ %@", @"Bearer", @"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"] forHTTPHeaderField:@"Authorization"]; |
指定Request的序列化方式
1 | NSMutableDictionary *parametersDic = [NSMutableDictionary dictionary]; |
Request序列化的方式有三种 (上面示例的就是方式1)
- GET一种 也就是默认的方式
- POST两种 默认的方式 和JSON方式
假如要请求的URL 和参数如下
1 | NSString *URLString = @"http://example.com"; |
1) 方式1 GET请求默认的方式
1 | HTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil]; |
实际请求的样子
1 | GET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3 |
2) 方式2 POST请求默认的方式
1 | [[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil]; |
实际请求的样子
1 | POST http://example.com/ |
3) 方式3 POST请求JSON形式的方式
1 | [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil]; |
实际请求的样子
1 | POST http://example.com/ |
指定Response的序列化方式
1 | AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; |
如果不指定
默认如果返回的格式是json
类型 返回的responseObject
就是NSDictionary
类型 可以类似这样取值responseObject[@"msg"]
如果不是json
格式 就为nil
如果返回格式不固定 或者自己处理 就添加上面的序列化方式
建议
如果结果确定为JSON 就不添加上面的代码
不确定 自己处理就需要添加
自己序列化的代码
1 | NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil]; |
所以还是建议添加序列化方式 自己处理
设置cookie
思路
- 请求之前设置cookie
- 请求回调之后保存cookie
代码如下
1 | //保存cookie |
文件下载
1 | /** |
文件上传
1 | //1.创建管理者对象 |
- 获取Task 普通上传
1 | NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; |
- 获取Task
Multi-Part
Request
1 | NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://www.psvmc.cn/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { |
监测当前网络状态(网络监听)
1 | - (void)AFNetworkStatus{ |