zoukankan      html  css  js  c++  java
  • iOS常用开源框架之ASIHTTPRequest

    1:在github上下载
    https://github.com/yjxsf8313/asi-http-request

    2:引入

    1)在项目下新建一个Group,命名为ASIHttp,鼠标右击,选中“Add files to ....”,将下载的ASIHttprequest库中的class文件夹都引用进来,并将Externl文件夹中的Reachability添加到class下。留下ASIWebPageRequest这个文件夹,其他的都删掉

    2)添加ASIHttprequest的依赖Frameworks:SystemConfiguration.framework, MobileCoreServices.framework,
    CFNetwork.framework和libz.dylib,libxml2.dylib这几个类库。

    3)解决ASIHttpRequest类库不支持ARC:选中项目target,在Build Phases中选Compile Source,将ASIHttpRequest的文件都改成:“-fno-objc-arc”

    4)解决“libxml/HTMLparser.h' file not found”问题:
    这个问题是因为你的开发环境默认的路径无法找到这个libxml2.dylib框架,修改方法:
    点击左边项目的根目录,再点击右边的Build Settings,输入文字:“Header search paths”,然后单击“ Header search paths ”右边的空白处,输入:${SDK_DIR}/usr/include/libxml2

    3:同步请求、异步请求

    - (IBAction)grabURL:(id)sender {
        
        NSURL *url = [NSURL URLWithString:@"http://waibo.sinaapp.com/"];
        
        //a:用requestWithURL方法获取ASIHTTPRequest的一个实例
        ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
        
        //b:startSynchronous方法启动同步访问
        [request startSynchronous];
        
        //c:由于是同步请求,没有基于事件的回调方法,所以从request的error属性获取错误信息
        NSError *error = [request error];
        
        if (!error) {
            NSString *response = [request responseString]; //d:responseString为请求返回的NSString信息
            NSLog(@"%@", response);
        }
    }
    
    /*异步请求至少要添加两个回调方法来获取异步事件
     a:与上面不同的是指定了一个"delegate",并用startAsynchronous来启动网络请求
     b:实现了两个delegate的方法,当数据请求成功时会调用requestFinished,请求失败会调用requestFailed
     */
    - (IBAction)grabURLInBackground:(id)sender {
        
        NSURL *url = [NSURL URLWithString:@"http://waibo.sinaapp.com/"];
        
        ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
        
        [request setDelegate:self];
        
        [request startAsynchronous];
    }
    
    - (void)requestFinished:(ASIHTTPRequest *)request
    {
        //Use when fetching text data
        NSString *responseString = [request responseString];
        
        //Use when fetching binary data
        NSData *responseData = [request responseData];
        
        NSLog(@"%@", responseString);
    }
    
    - (void)requestFailed:(ASIHTTPRequest *)request
    {
        NSError *error = [request error];
        
        NSLog(@"%@", error);
    }

    4:队列请求

    /*队列请求:提供了一个对异步请求更加精准丰富的控制。
     如可以设置在队列中,同步请求的连接数。往队列里添加的请求实例数大于maxConcurrentOperationCount时,请求实例将被设置为等待,直到前面至少有一个请求完成并出列才被放到队列里执行
     也适用于当我们有多个请求需要按顺序执行的时候(可能是业务上的需要,也可能是软件上调优),仅仅需要把maxConcurrentOperationCount设为1
     */
    - (IBAction)grabURLInTheBackground:(id)sender {
        
        if (![self queue]) {
            
            [self setQueue:[[NSOperationQueue alloc] init]];
            
            NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
            
            //a:请求队列上下文。可设置一个上下文(如userInfo)到request对象中,当请求响应完后可以通过访问request对象的userinfo获取里面的信息
            ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
            
            [request setDelegate:self];
            
            //b:为每个请求实例设置不同的setDidFinisheSelector / setDidFailSelector的回调方法
            [request setDidFinishSelector:@selector(requestDone:)];
            
            [request setDidFailSelector:@selector(requestWentWrong:)];
            
            [[self queue] addOperation:request];
        }
    }
    
    - (void)requestDone:(ASIHTTPRequest *)request
    {
        NSString *response = [request responseString];
        NSLog(@"%@", response);
    }
    
    - (void)requestWentWrong:(ASIHTTPRequest *)requeset
    {
        NSError *error = [requeset error];
        NSLog(@"%@", error);
    }
  • 相关阅读:
    webserver的使用
    vs2010旗舰版中.net framework 4安装不成功的解决办法
    测量距离
    Mybatis初学习
    Mybatis的一些优化
    开博想法
    matplotlib 画图中的basemap安装问题
    Ubuntu 提示sudo: java: command not found解决办法
    django 中静态文件项目加载问题
    Velocity组装Xml报文
  • 原文地址:https://www.cnblogs.com/mumue/p/2974113.html
Copyright © 2011-2022 走看看