iOS AFNetwork实现Http相关操作(NetReachable、Get、Post、Upload、Download)
来源:互联网 发布:电视直播软件哪个最好 编辑:程序博客网 时间:2024/06/04 19:46
AFNetworking是一个轻量级的iOS网络通信类库。它建立在NSURLConnection和NSOperation等类库的基础上,让很多网络通信功能的实现变得十分简单。它支持HTTP请求和基于REST的网络服务(包括GET、POST、 PUT、DELETE等)。支持ARC。
Github地址:https://github.com/AFNetworking/AFNetworking
当前的AFNetworking版本为 v3.1.0。
特别指出 v3.x 与 v2.x 的区别:Xcode 7+ is required.NSURLConnectionOperation support has been removed
(网上2015年千篇一律的AFNetworking代码都是基于 v2.x 的,到 v3.x 有很多方法deprecated了。所以建议新手还是自己手打一遍比较好)
以下代码为 csdn "chy龙神" 原创,基于XCode7、iOS9.0、Mac OS 10.11
//// ViewController.m// AFNetworkDemo//// Created by 555chy on 6/27/16.// Copyright © 2016 555chy. All rights reserved.//#import "ViewController.h"#import "AFNetworking.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib.}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}/* 1. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager] 所有的网络请求,均由manager发起 2. 注意:默认提交请求的数据是二进制的,返回格式是JSON 3. 请求格式 AFHttpRequestSerializer 二进制 AFJSONRequestSerializer JSON AFPropertyListRequestSerializer PList(一种特殊的XML,但解析起来相对容易) 4. 返回格式 AFHTTPResponseSerializer 二进制 AFJSONResponseSerialializer JSON AFXMLParserResponseSerializer XML,只能返回XMLParser,还需要自己通过代理方法解析 AFXMLDocumentResponseSerializer Mac OS X AFPropertyListResponseSerializerPList PList AFImageResponseSerializer Image AFCompoundResponseSerializer 组合 */#pragma mark - 检测网络连接-(void)networkReachable { //sharedManager表示单例 AFNetworkReachabilityManager *networkReachabilityManager = [AFNetworkReachabilityManager sharedManager]; [networkReachabilityManager startMonitoring]; [networkReachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { /* typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) { AFNetworkReachabilityStatusUnknown = -1, 未知 AFNetworkReachabilityStatusNotReachable = 0, 无连接 AFNetworkReachabilityStatusReachableViaWWAN = 1, 2G、3G、4G AFNetworkReachabilityStatusReachableViaWiFi = 2, Wifi局域网 }; */ NSString *statusStr; switch (status) { case AFNetworkReachabilityStatusUnknown: statusStr = @"AFNetworkReachabilityStatusUnknown"; break; case AFNetworkReachabilityStatusNotReachable: statusStr = @"AFNetworkReachabilityStatusNotReachable"; break; case AFNetworkReachabilityStatusReachableViaWWAN: statusStr = @"AFNetworkReachabilityStatusReachableViaWWAN"; break; case AFNetworkReachabilityStatusReachableViaWiFi: statusStr = @"AFNetworkReachabilityStatusReachableViaWiFi"; break; } NSLog(@"networkReachable %@ = %ld", statusStr, status); }];}#pragma mark - 上传(下载)文件/* 上传和下载雷同,故这里只介绍下载 (1)上传:@"http://example.com/upload" - (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL progress:(nullable void (^)(NSProgress *uploadProgress))uploadProgressBlock completionHandler:(nullable void (^)(NSURLResponse *response, id _Nullable responseObject, NSError * _Nullable error))completionHandler; (2)下载:@"http://example.com/download.zip" - (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgressBlock destination:(nullable NSURL * (^)(NSURL *targetPath, NSURLResponse *response))destination completionHandler:(nullable void (^)(NSURLResponse *response, NSURL * _Nullable filePath, NSError * _Nullable error))completionHandler; *///urlStr这个参数可以包含中文-(void)sessionDownload:(NSString *) urlStr { NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; //对url进行urlEncode编码(%编码) //NS_DEPRECATED(10_0, 10_11, 2_0, 9_0, "Use -stringByAddingPercentEncodingWithAllowedCharacters: instead, which always uses the recommended UTF-8 encoding, and which encodes for a specific URL component or subcomponent since each URL component or subcomponent has different rules for what characters are valid."); NSString *percentEscapesUrlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *percentEncodeUrlStr = [urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]; NSLog(@"sessionDownload stringByAddingPercentEscapesUsingEncoding = %@", percentEscapesUrlStr); NSLog(@"sessionDownload stringByAddingPercentEncodingWithAllowedCharacters = %@", percentEncodeUrlStr); NSURL *url = [NSURL URLWithString:percentEncodeUrlStr]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSURLSessionDownloadTask *downLoadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) { //fraction分数,这里表示百分比下载进度 double downloadFraction = downloadProgress.fractionCompleted; NSString *downloadDescription = downloadProgress.localizedDescription; NSString *downloadAdditionalDescription = downloadProgress.localizedAdditionalDescription; NSLog(@"sessionDownload fractionCompleted = %lf, localizedDescription = %@, localizedAdditionalDescription = %@", downloadFraction, downloadDescription, downloadAdditionalDescription); } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) { NSString *suggestedFileName = response.suggestedFilename; //保存路径和文件名 NSLog(@"sessionDownload targetPath = %@, response = %@)", targetPath, suggestedFileName); NSString *cacheDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; NSString *path = [cacheDir stringByAppendingPathComponent:suggestedFileName]; //如果保存的地址是网络地址,用URLWithString NSURL *webUrl = [NSURL URLWithString:path]; NSURL *fileUrl = [NSURL fileURLWithPath:path]; NSLog(@"sessionDownload webUrl = %@, fileUrl = %@", webUrl, fileUrl); return fileUrl; } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) { NSLog(@"sessionDownload response = %@, filePath = %@, error = %@", response, filePath, error); }]; //最后的resume是为了防止被ARC回收 [downLoadTask resume];}#pragma mark - Get、POST通过参数上传,通过返回数据下载-(void)sessionGet:(NSString *)urlStr parameters:(NSDictionary *) params { NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration]; NSURL *url = [NSURL URLWithString:urlStr]; /* requestMethod有GET、POST等 例如: NSString *URLString = @"http://example.com"; NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]}; 用默认请求方法的话使用的是GET NSURLRequest *request = [NSURLRequest requestWithURL:url]; */ NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:urlStr parameters:params error:nil]; NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request uploadProgress:nil downloadProgress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { NSLog(@"loginByGet response = %@, responseObject = %@, error = %@", response, responseObject, error); }]; [dataTask resume];}@end
0 0
- iOS AFNetwork实现Http相关操作(NetReachable、Get、Post、Upload、Download)
- Android HTTP Client: GET, POST, Download, Upload, Multipart Request
- Socket实现的HTTP协议查看器(GET/POST/UPLOAD)
- iOS - AFNetwork GET POST使用例子
- IOS开发 HTTP相关GET/POST请求
- VC,Http库(get,post,upload(File))
- 用java的.net包和http的post实现upload和download- -
- Android 实现Http get 和post操作
- C++/C 实现http GET/POST操作
- libcurl http download upload
- iOS-Http : GET : POST
- AFNetwork学习(二)——GET/POST请求
- Java实现http(post、get)请求
- Qt http操作(GET, POST)
- iOS http get和post
- iOS http get和post
- iOS http访问post 、get
- iOS 开发 中级:HTTP请求 GET POST 网络编程实现
- round15
- 装箱与拆箱(Java核心卷1 - D5)
- Understanding GameTime
- JBOSS EAP实战(2)-集群、NGINX集成、队列与安全
- XNA“效率”探索——一个简单的繁花曲线程序
- iOS AFNetwork实现Http相关操作(NetReachable、Get、Post、Upload、Download)
- Spring JdbcTemplate RowCallbackHandler和RowMapper<T>的比较
- GibbsLDA model.h分析
- GSON解析
- [Android/Root]nubia z9 max 双4G9.05 android5.1.1系统root方法
- MATLAB入门(2)--基本绘图
- LinuxMint18Beta,NDKr11c,neon-R编译Cocos2dx3.5
- java 实现即时聊天设计(利用ip进行远程通信)
- Windos 10 UWP 设置手机状态栏