本文共 8797 字,大约阅读时间需要 29 分钟。
只需要拷贝 AFNetworking UIKit+AFNetworking 这两个目录中的文件就可以正常使用
下面的类已从AFNetworking 3.0中废弃:
AFHTTPRequestOperationManager
NSMutableDictionary *params = [NSMutableDictionary dictionary]; AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; progress :^( NSProgress * _Nonnull downloadProgress) success :^( NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) NSLog ( @" 这里打印请求成功要做的事 " ); NSString *result = [[ NSString alloc ] initWithData :responseObject encoding : NSUTF8StringEncoding ]; NSData *jsonData = [result dataUsingEncoding : NSUTF8StringEncoding ]; NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableLeaves error:nil]; NSHTTPURLResponse *HTTPResponse = ( NSHTTPURLResponse *)task. response ; NSDictionary *fields = [HTTPResponse allHeaderFields ]; // 原生 NSURLConnection 写法 NSLog ( @"fields = %@" , [fields description ]); NSArray *cookies = [ NSHTTPCookie cookiesWithResponseHeaderFields :fields forURL :[ NSURL URLWithString :url]]; for ( NSHTTPCookie *cookie in cookies) NSLog ( @"cookie1 - > %@" , cookie); NSString *cookieString = [[HTTPResponse allHeaderFields ] valueForKey : @"Set-Cookie" ]; NSLog ( @"cookie2 - > %@" , cookieString); NSHTTPCookieStorage *cookieJar = [ NSHTTPCookieStorage sharedHTTPCookieStorage ]; for ( NSHTTPCookie *cookie in [cookieJar cookies ]) NSLog ( @"cookie3 - > %@" , cookie); failure :^( NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) NSLog ( @"%@" ,error); // 这里打印错误信息 AFHTTPSessionManager *manager = [ AFHTTPSessionManager manager ]; NSMutableDictionary *parameters = @{ @"":@"", @"":@""}; progress:^(NSProgress * _Nonnull uploadProgress) success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manage. requestSerializer = [ AFHTTPRequestSerializer serializer ]; manage.requestSerializer.stringEncoding = NSUTF8StringEncoding; manage. requestSerializer . timeoutInterval = 10 ; manage. responseSerializer = [ AFHTTPResponseSerializer serializer ]; manage. responseSerializer . stringEncoding = NSUTF8StringEncoding ; manage.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; NSURL *url = [ NSURL URLWithString : @"" ]; NSURLRequest *request = [ NSURLRequest requestWithURL :url]; NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest :request progress :^( NSProgress * _Nonnull downloadProgress) NSLog ( @"%lf" , 1.0 * downloadProgress. completedUnitCount / downloadProgress. totalUnitCount ); destination :^ NSURL * _Nonnull ( NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) NSLog ( @" 默认下载地址 :%@" ,targetPath); // 设置下载路径,通过沙盒获取缓存地址,最后返回 NSURL 对象 NSString *filePath = [ NSSearchPathForDirectoriesInDomains ( NSCachesDirectory , NSUserDomainMask , YES ) lastObject ]; return [ NSURL URLWithString :filePath]; completionHandler :^( NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) NSLog ( @"%@--%@" ,response,filePath); AFHTTPSessionManager *manager = [ AFHTTPSessionManager manager ]; NSDictionary *dict = @{ @"" : @"" } ; NSString *urlString = @"" ; constructingBodyWithBlock :^( id < AFMultipartFormData > _Nonnull formData) UIImage *iamge = [ UIImage imageNamed : @"123.png" ]; NSData *data = UIImagePNGRepresentation (iamge); [formData appendPartWithFileData :data name : @"file" fileName : @"123.png" mimeType : @"image/png" ]; progress :^( NSProgress * _Nonnull uploadProgress) NSLog ( @"%lf" , 1.0 * uploadProgress. completedUnitCount / uploadProgress. totalUnitCount ); success :^( NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) NSLog ( @" 请求成功: %@" ,responseObject); failure :^( NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) NSLog ( @" 请求失败: %@" ,error); 第二种是通过URL来获取路径,进入沙盒或者系统相册等等
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; NSDictionary *dict = @{ @"" : @"" } ; NSString *urlString = @"" ; constructingBodyWithBlock :^( id < AFMultipartFormData > _Nonnull formData) [formData appendPartWithFileURL :[ NSURL fileURLWithPath : @" 文件地址 " ] name : @"file" fileName : @"1234.png" mimeType : @"application/octet-stream" error : nil ]; progress :^( NSProgress * _Nonnull uploadProgress) NSLog ( @"%lf" , 1.0 * uploadProgress. completedUnitCount / uploadProgress. totalUnitCount ); success :^( NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) NSLog ( @" 请求成功: %@" , responseObject); failure :^( NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) NSLog ( @" 请求失败: %@" , error); AFHTTPSessionManager *manager = [ AFHTTPSessionManager manager ]; [manager.requestSerializer setHTTPShouldHandleCookies:YES]; [manager.requestSerializer setValue:[NSString stringWithFormat:@"%@=%@", [cookie name], [cookie value]] forHTTPHeaderField:@"Cookie"]; NSMutableDictionary *cookieProperties = [ NSMutableDictionary dictionary ]; [cookieProperties setObject:@"username" forKey:NSHTTPCookieName]; [cookieProperties setObject : @"my ios cookie" forKey : NSHTTPCookieValue ]; [cookieProperties setObject : @"" forKey : NSHTTPCookieDomain ]; [cookieProperties setObject : @"" forKey : NSHTTPCookieOriginURL ]; [cookieProperties setObject : @"/" forKey : NSHTTPCookiePath ]; [cookieProperties setObject : @"0" forKey : NSHTTPCookieVersion ]; [cookieProperties setObject :[ NSDate dateWithTimeIntervalSinceNow : 60 * 60 ] forKey : NSHTTPCookieExpires ]; // 设置失效时间 [cookieProperties setObject : @"0" forKey : NSHTTPCookieDiscard ]; // 设置 sessionOnly NSHTTPCookie *cookie = [ NSHTTPCookie cookieWithProperties :cookieProperties]; [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; NSHTTPCookieStorage *cookieJar = [ NSHTTPCookieStorage sharedHTTPCookieStorage ]; NSArray *cookieArray = [ NSArray arrayWithArray :[cookieJar cookies ]]; for ( id obj in cookieArray) [cookieJar deleteCookie :obj]; // NSHTTPCookieAcceptPolicyAlways: 保存所有 cookie ,这个是默认值 // NSHTTPCookieAcceptPolicyNever: 不保存任何响应头中的 cookie // NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain: 只保存域请求匹配的 cookie [[NSHTTPCookieStorage sharedHTTPCookieStorage]setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; // 保存 Cookie - ( void )saveCookies { NSData *cookiesData = [ NSKeyedArchiver archivedDataWithRootObject :[[ NSHTTPCookieStorage sharedHTTPCookieStorage ] cookies ]]; NSUserDefaults *defaults = [ NSUserDefaults standardUserDefaults ]; [defaults setObject :cookiesData forKey : @"org.skyfox.cookie" ]; [defaults synchronize ]; } // 加载 Cookie 一般都是 app 刚刚启动的时候 - ( void )loadCookies { NSArray *cookies = [ NSKeyedUnarchiver unarchiveObjectWithData :[[ NSUserDefaults standardUserDefaults ] objectForKey : @"org.skyfox.cookie" ]]; NSHTTPCookieStorage *cookieStorage = [ NSHTTPCookieStorage sharedHTTPCookieStorage ]; for ( NSHTTPCookie *cookie in cookies) { [cookieStorage setCookie :cookie]; } (1)开启网络监听,一般在程序启动时调用,可以放在 AppDelegate 中
[[ AFNetworkReachabilityManager sharedManager ] startMonitoring ]; (2)在需要监测网络的地方调用该方法去获取当前网络状态
AFNetworkReachabilityManager *manager = [ AFNetworkReachabilityManager sharedManager ]; // 枚举里面四个状态 分别对应 未知 无网络 数据 WiFi // typedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) { // AFNetworkReachabilityStatusUnknown = -1, 未知 // AFNetworkReachabilityStatusNotReachable = 0, 无网络 // AFNetworkReachabilityStatusReachableViaWWAN = 1, 蜂窝数据网络 // AFNetworkReachabilityStatusReachableViaWiFi = 2, WiFi [manager setReachabilityStatusChangeBlock :^( AFNetworkReachabilityStatus status) case AFNetworkReachabilityStatusUnknown : case AFNetworkReachabilityStatusNotReachable : case AFNetworkReachabilityStatusReachableViaWWAN : case AFNetworkReachabilityStatusReachableViaWiFi : NSLog ( @"WiFi 网络 " ); break ; default : 注:如果启动就去检测有可能得到的是 status == AFNetworkReachabilityStatusUnknown,建议延迟在调用或者 在收到监听网络状态回调以后再取 转载地址:http://spgab.baihongyu.com/