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框架;
  • 相关阅读:
    Django: ModelForm中Meta的fields等成员介绍
    python的random函数
    设置mysql隔离级别
    ubantu 下 修改mysql 默认编码
    jdbc 模板 连接
    sql 注入 与解决
    jdbc 简单连接
    动态代理 例子
    自定义的一个数据输入类
    类加载器 读取配置文件
  • 原文地址:https://www.cnblogs.com/needly/p/3401031.html
Copyright © 2011-2022 走看看