zoukankan      html  css  js  c++  java
  • ASIHttpRequest网络使用框架

    /********开源库ASI的使用********/
    /*依赖的5个库文件: CFNetwork, SystemConfiguration, MobileCoreServices, 和 libz、libxml2
     *ASIHttpRequest 是一款极其强劲的 HTTP 访问开源项目。让简单的 API 完成复 杂的功能,如:异步请求,队列请求,GZIP 压缩,缓存,断点续传,进度跟踪,上传文 件,HTTP 认证。 在新的版本中,还加入了 Objective-C 闭包 Block 的支持,让我们 的代码加轻简灵活。*/
    // ·官方网址: http://allseeing-i.com/ASIHTTPRequest/How-to-use
    // ·下载地址: https://github.com/pokeb/asi-http-request
    
    
    /********发起同步请求********/
    - (void)synchronousRequest {
        if ([self.urlField.text length] == 0) {
            return; }
        // 初始化一个url
        NSURL *url = [NSURL URLWithString:self.urlField.text];
        // 创建request对象
        ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
        // 设置请求方式
        [request setRequestMethod:@"POST"];
        // 发送一个同步请求
        [request startSynchronous];
        NSError *error = [request error];
        if (!error) {
            // 获取请求数据
            NSString *response = [request responseString]; self.textField.text = response;
        }
    }
    
    
    /********发起异步请求********/
    - (void)aSynchronousRequest {
        if ([self.urlField.text length] == 0) {
            return; }
      NSURL
    *url = [NSURL URLWithString:self.urlField.text];
      ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; [request setDelegate:self]; // 发送异步请求 [request startAsynchronous]; } // 数据加载结束delegate - (void)requestFinished:(ASIHTTPRequest *)request { NSString *responseString = [request responseString]; self.textField.text = responseString; } // 数据加载失败delegate - (void)requestFailed:(ASIHTTPRequest *)request { NSError *error = [request error]; } /********Block回调********/ // 设置开始请求回调 - (void)setStartedBlock:(ASIBasicBlock)aStartedBlock; // 设置请求完成回调 - (void)setCompletionBlock:(ASIBasicBlock)aCompletionBlock; // 设置请求失败回调 - (void)setFailedBlock:(ASIBasicBlock)aFailedBlock; // 设置数据接受回调,调用多次,每次返回加载的数据 - (void)setDataReceivedBlock:(ASIDataBlock)aReceivedBlock; //Block回调示例 // 异步请求 - (void)aSynchronousRequest { // 如果url不存在,不执行 if ([self.urlField.text length] == 0) { return; } NSURL *url = [NSURL URLWithString:self.urlField.text]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; // 设置数据请求完成后回调的block [request setCompletionBlock:^{ NSString *responseText = [request responseString]; NSLog(@"%@",responseText); }]; // 发送异步请求 [request startAsynchronous]; } /********设置缓存策略********/ /* * 缓存策略说明 * ASICacheForSessionDurationCacheStoragePolicy 清除上次会话请求的本地缓存数据 * ASICachePermanentlyCacheStoragePolicy 是持久缓存,程序瑕疵启动,缓存仍人存在 */ // 创建缓存对象 ASIDownloadCache *asiCache = [[ASIDownloadCache alloc] init]; // 设置缓存目录,这里设置沙河目录下得Documents目录作为缓存目录 NSString *document = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; [asiCache setStoragePath:document]; // 设置缓存策略 [asiCache setDefaultCachePolicy:ASIOnlyLoadIfNotCachedCachePolicy]; // 创建数据请求对象 ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL: [NSURL  URLWithString:urlString]]; // 设置缓存策略 request.cacheStoragePolicy = ASICachePermanentlyCacheStoragePolicy; // ????????? [request setDownloadCache:cache]; // 开始异步请求网络 [request startAsynchronous]; // 网络数据加载完毕后调用block [request setCompletionBlock:^{ // 打印返回的数据 NSString *responseString = request.responseString; NSLog(@"%@", responseString); // 判断返回的数据是否来自本地缓存 if (request.didUseCachedResponse) { NSLog(@"使用缓存数据"); } else { NSLog(@"请求网络数据"); } }]; /********文件下载*********/ // 设置本地路径path NSString *urlstring = @”http://free2.macx.cn:81/tools/system/CleanMyMac- v1-10-8.dmg”; NSString *filename = [urlstring lastPathComponent]; NSString *path = [NSHomeDirectory() stringByAppendingPathComponent: [NSString stringWithFormat:@"Documents/%@",filename]]; ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL: [NSURL URLWithString:urlstring]]; // 设置下载路径 [request setDownloadDestinationPath:path]; // 设置下载进度条视图 // 监听下载进度条需要用到kvo [request setDownloadProgressDelegate:self.myProgress]; // 开始异步下载 [request startAsynchronous]; /********请求队列********/ //·ASIHTTPRequest 类是继承于NSOperation, 所以它本身是可以添加到请求队列 中NSOperationQueue。 //·ASI为我们提供了请求队列对象ASINetworkQueue,它继承于NSOperationQueue // 创建请求队列 ASINetworkQueue *queue = [ASINetworkQueue queue]; // 设置并发数 [queue setMaxConcurrentOperationCount:1]; // 将请求添加到队列中 [queue addOperation:request1]; [queue addOperation:request2]; // 执行队列中的请求 [queue go]; /********取消异步请求********/ // 请求取消后,默认按请求失败处理,调用失败的delegate [request cancel]; // 如果不想调用失败后的delegate,则设置 [request clearDelegatesAndCancel]; // 获取下载请求进度delegate downloadProgressDelegate // 获取上传请求进度delegate uploadProgressDelegate /********其他特性********/ // ios4以上,是否开启后台运行 [request setShouldContinueWhenAppEntersBackground:YES]; // 设置超时自动重试最大次数为2 [request setNumberOfTimesToRetryOnTimeout:2]; // 获取cookies NSMutableArray *cookies = [request requestCookies]; // 清除cookies [ASIHTTPRequest clearSession]; // 设置cookies [ASIHTTPRequest setSessionCookies:cookies]; // 当前网络是否可用 [ASIHTTPRequest isNetworkInUse]; // 当前网络是否为3G/2G [ASIHTTPRequest isNetworkReachableViaWWAN]; // 网络请求时,关闭状态栏上显示的loading [ASIHTTPRequest setShouldUpdateNetworkActivityIndicator:NO]; /********监听网络-NSNotificationCenter********/ [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabilityChanged:) name: kReachabilityChangedNotification object: nil]; Reachability *internetReach = [[Reachability reachabilityForInternetConnection]]; [internetReach startNotifier]; NetworkStatus netStatus = [internetReach currentReachabilityStatus]; if (netStatus) { // NSLog(@"网络通"); } - (void)reachabilityChanged: (NSNotification* )note { NetworkStatus netStatus = [internetReach currentReachabilityStatus]; if (netStatus) { // NSLog(@"网络通"); }else { // NSLog(@"网络不通"); } } // 注意添加systemConfiguration框架;
  • 相关阅读:
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
  • 原文地址:https://www.cnblogs.com/needly/p/3401031.html
Copyright © 2011-2022 走看看