從github下載AFNetworking3.0,把AFNetworking.h 和 UIKit+AFNetworking.h導入工程
(下載地址:https://github.com/AFNetworking/AFNetworking.git)
注意!!
AFNetworking不支持text/html
遇到請求頭到錯誤時在AFURLResponseSerialization.m里修改
1 //把@"text/html" 添加到下面代碼里就行, 2 self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain", nil];
或者在需要的地方寫代碼
1 //設置請求頭contenttypes信息 2 manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
//初始化 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
如果后台接口是二進制格式
//默認的 manager.requestSerializer = [AFHTTPRequestSerializer serializer]; manager.responseSerializer = [AFHTTPResponseSerializer serializer];
如果后台接口是JSON格式
manager.requestSerializer = [AFJSONRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
GET
Request
[manager GET:@"example" parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) { //這里可以用來顯示下載進度 } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //成功 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //失敗 }];
POST
Request
//post請求參數一般用字典,鍵要與請求url的參數名一致。 [manager POST:@"example" parameters:parameters progress:^(NSProgress * _Nonnull uploadProgress) { //進度 } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //成功 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { //失敗 }];
Shared Network Reachability
//監聽網絡 /* AFNetworkReachabilityStatusUnknown = -1, AFNetworkReachabilityStatusNotReachable = 0, AFNetworkReachabilityStatusReachableViaWWAN = 1, AFNetworkReachabilityStatusReachableViaWiFi = 2, NSString * AFStringFromNetworkReachabilityStatus(AFNetworkReachabilityStatus status) { switch (status) { case AFNetworkReachabilityStatusNotReachable: return NSLocalizedStringFromTable(@"Not Reachable", @"AFNetworking", nil); case AFNetworkReachabilityStatusReachableViaWWAN: return NSLocalizedStringFromTable(@"Reachable via WWAN", @"AFNetworking", nil); case AFNetworkReachabilityStatusReachableViaWiFi: return NSLocalizedStringFromTable(@"Reachable via WiFi", @"AFNetworking", nil); case AFNetworkReachabilityStatusUnknown: default: return NSLocalizedStringFromTable(@"Unknown", @"AFNetworking", nil); } } */ [[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status))
}];
[[AFNetworkReachabilityManager sharedManager] startMonitoring];
//單純判斷有無網絡可以用isReachable屬性 if ([[AFNetworkReachabilityManager manager] isReachable] == NO) { //do something }
上傳圖片
圖片上傳的時候要問后台只能單張上傳或者多張上傳.
//單張上傳 [manager POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { //創建待上傳圖片的名稱,為了不重名,一般使用當前時間+圖片類型(eg .png)為名稱 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyyMMddHHmmss"; //服務器保存上傳圖片的路徑,這個路徑后台給的話用后台的,沒給就自己創建(此處沒給) NSString *name = [formatter stringFromDate:[NSDate date]]; //后綴 .png .jpg NSString *fileName = [[formatter stringFromDate:[NSDate date]] stringByAppendingString:@".jpg"]; /* *UIImageJPEGRepresentation(image,1.0) //待壓縮比例 *UIImagePNGRepresentation(image) *這是iOS自帶的將UIImage對象轉成NSData */ NSData *data = UIImageJPEGRepresentation(image,1.0); //開始上傳 [formData appendPartWithFileData:data name:name fileName:fileName mimeType:@"image/jpg"]; } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //根據responseObject獲取后台返回的內容 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { }];
/* * 多張上傳和單張上傳的區別: * 圖片名要按時間+數組中圖片的index+.jpg * 服務器保存圖片的路徑按時間+數組中圖片的index */ //多張上傳 //圖片上傳 for (int i = 0; i < imageArr.count; i ++) { [manager POST:@"http://112.54.80.235:50406/IndustryPioneer.svc/uploadimageIos" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { //創建待上傳圖片的名稱,為了不重名,一般使用當前時間+圖片類型(eg .png)為名稱 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyyMMddHHmmss"; //服務器保存上傳圖片的路徑,這個路徑后台給的話用后台的,沒給就自己創建(此處沒給) NSString *name = [NSString stringWithFormat:@"%@%d",[formatter stringFromDate:[NSDate date]],i]; //后綴 .png .jpg NSString *fileName = [[NSString stringWithFormat:@"%@%d",[formatter stringFromDate:[NSDate date]],i] stringByAppendingString:@".jpg"]; /* *UIImageJPEGRepresentation(image,1.0) //待壓縮比例 *UIImagePNGRepresentation(image) *這是iOS自帶的將UIImage對象轉成NSData */ NSData *data = UIImageJPEGRepresentation([imageArr objectAtIndex :i],1.0); //開始上傳 [formData appendPartWithFileData:data name:name fileName:fileName mimeType:@"image/jpg"]; } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //根據responseObject獲取后台返回的內容 } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { }]; }