#import "ViewController.h" #import "AFNetworking.h" @interface ViewController () @end @implementation ViewController -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [self post]; } -(void)get { //1.創建會話管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //http://120.25.226.186:32812/login?username=123&pwd=122&type=JSON // NSDictionary *paramDict = @{ @"username":@"520it", @"pwd":@"520it", @"type":@"JSON" }; //2.發送GET請求 /* 第一個參數:請求路徑(不包含參數).NSString 第二個參數:字典(發送給服務器的數據~參數) 第三個參數:progress 進度回調 第四個參數:success 成功回調 task:請求任務 responseObject:響應體信息(JSON--->OC對象) 第五個參數:failure 失敗回調 error:錯誤信息 響應頭:task.response */ [manager GET:@"http://120.25.226.186:32812/login" parameters:paramDict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"%@---%@",[responseObject class],responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"請求失敗--%@",error); }]; } -(void)post { //1.創建會話管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; NSDictionary *paramDict = @{ @"username":@"520it", @"pwd":@"520", @"type":@"JSON" }; //2.發送GET請求 /* 第一個參數:請求路徑(不包含參數).NSString 第二個參數:字典(發送給服務器的數據~參數) 第三個參數:progress 進度回調 第四個參數:success 成功回調 task:請求任務 responseObject:響應體信息(JSON--->OC對象) 第五個參數:failure 失敗回調 error:錯誤信息 響應頭:task.response */ [manager POST:@"http://120.25.226.186:32812/login" parameters:paramDict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"%@---%@",[responseObject class],responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"請求失敗--%@",error); }]; } @end
```objc
AFN結構體
- NSURLConnection
+ AFURLConnectionOperation(已經被廢棄)
+ AFHTTPRequestOperation(已經被廢棄)
+ AFHTTPRequestOperationManager(封裝了常用的 HTTP 方法)(已經被廢棄)
* 屬性
* baseURL :AFN建議開發者針對 AFHTTPRequestOperationManager 自定義個一個單例子類,設置 baseURL, 所有的網絡訪問,都只使用相對路徑即可
* requestSerializer :請求數據格式/默認是二進制的 HTTP
* responseSerializer :響應的數據格式/默認是 JSON 格式
* operationQueue
* reachabilityManager :網絡連接管理器
* 方法
* manager :方便創建管理器的類方法
* HTTPRequestOperationWithRequest :在訪問服務器時,如果要告訴服務器一些附加信息,都需要在 Request 中設置
* GET
* POST
- NSURLSession
+ AFURLSessionManager
+ AFHTTPSessionManager(封裝了常用的 HTTP 方法)
* GET
* POST
* UIKit + AFNetworking 分類
* NSProgress :利用KVO
- 半自動的序列化&反序列化的功能
+ AFURLRequestSerialization :請求的數據格式/默認是二進制的
+ AFURLResponseSerialization :響應的數據格式/默認是JSON格式
- 附加功能
+ 安全策略
* HTTPS
* AFSecurityPolicy
+ 網絡檢測
* 對蘋果的網絡連接檢測做了一個封裝
* AFNetworkReachabilityManager
建議:
可以學習下AFN對 UIKit 做了一些分類, 對自己能力提升是非常有幫助的
```
- 0.2 AFN的基本使用
(1)發送POST請求的方式
```objc
-(void)post
{
//1.創建會話管理者
//AFHTTPSessionManager內部是基於NSURLSession實現的
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//2.創建參數
NSDictionary *dict = @{
@"username":@"520it",
@"pwd":@"520it",
};
//3.發送POST請求
/*
http://120.25.226.186:32812/login?username=ee&pwd=ee&type=JSON
第一個參數:NSString類型的請求路徑,AFN內部會自動將該路徑包裝為一個url並創建請求對象
第二個參數:請求參數,以字典的方式傳遞,AFN內部會判斷當前是POST請求還是GET請求,以選擇直接拼接還是轉換為NSData放到請求體中傳遞
第三個參數:進度回調 此處為nil
第四個參數:請求成功之后回調Block
第五個參數:請求失敗回調Block
*/
[manager POST:@"http://120.25.226.186:32812/login" parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//注意:responseObject:請求成功返回的響應結果(AFN內部已經把響應體轉換為OC對象,通常是字典或數組)
NSLog(@"請求成功---%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"請求失敗---%@",error);
}];
}
```