博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASI简单实现网络编程
阅读量:6825 次
发布时间:2019-06-26

本文共 4125 字,大约阅读时间需要 13 分钟。

  使用iOS SDK中的HTTP网络请求API,相当的复杂,调用比較麻烦。ASIHTTPRequest 对CFNetwork API进行了封装。而且使用起来非常easy的一套API,在非常多比較老旧的项目依旧存在,因此大家仍然须要熟悉ASI的使用。以下我们一起学习研究一下ASI的简单使用。

一、环境搭建

1、首先下载asi包,而且引入以下文件:http://allseeing-i.com/ASIHTTPRequest/ 

2、添加框架

二、用法

  1、发送同步GET请求,直接调用startSynchronous方法就可以。以下的服务地址自己能够自己搭建,发送请求后调用请求的responseData属性便获取到返回的数据:

 
- (void)sync{    NSURL *url=[NSURL URLWithString:@"http://192.168.2.162/logo.php?userName=jereh&pwd=123"];    ASIHTTPRequest * requst=[[ASIHTTPRequest alloc] initWithURL:url]; //设置超时时间    requst.timeOutSeconds=3;        //发送同步请求    [requst startSynchronous];        if(requst.error){        NSLog(@"请求出错了,%@",requst.error);    }else {        NSData * data=requst.responseData;        NSDictionary * dic=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];        NSLog(@"%@",dic);    }}

  2、发送异步GET请求。直接调用startAsynchronous方法就可以,异步和同步稍有不同。使用代理接受数据

 
- (void)async{    dataResult=[NSMutableData data];     NSURL *url=[NSURL URLWithString:@"http://192.168.2.162/logo.php?userName=jereh&pwd=123"];    ASIHTTPRequest * requst=[[ASIHTTPRequest alloc] initWithURL:url];    self.request=requst;    requst.timeOutSeconds=3;    requst.delegate=self;    [requst startAsynchronous];    }//開始发送请求- (void)requestStarted:(ASIHTTPRequest *)request{}//失败的时候调用- (void)requestFailed:(ASIHTTPRequest *)request{ NSLog(@"===requestFailed");}//接收数据调用。假设文件过大分多次调用,此处须要拼接返回的data- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data{    [dataResult appendData:data];}//请求结束后解析数据- (void)requestFinished:(ASIHTTPRequest *)request{    NSDictionary * dic=[NSJSONSerialization JSONObjectWithData:dataResult options:NSJSONReadingMutableContainers error:nil];    }

  3、使用块来实现异步GET请求,由于当面对多个请求的时候採用代理的方式略微显得有点麻烦。比方在拼接数据的时候须要推断当前是哪个请求,然后依据请求对象地址来确定採取哪种拼接,所以,在处理多个请求的时候用块比較有优势

 
- (void) asyncFormBlock{        NSURL *url=[NSURL URLWithString:@"http://192.168.2.162/loginPost.php"];        ASIFormDataRequest * request=[ASIFormDataRequest requestWithURL:url];        //设置请求參数    [request setPostValue:@"jereh" forKey:@"userName"];    [request setPostValue:@"123" forKey:@"pwd"];    [request startAsynchronous];        //请求完毕后解析数据    [request setCompletionBlock:^{        NSDictionary * dic=[NSJSONSerialization JSONObjectWithData:dataResult options:NSJSONReadingMutableContainers error:nil];        NSLog(@"%@",dic);    }];        //開始接收的时候调用    [request setDataReceivedBlock:^(NSData *data) {        [dataResult appendData:data];    }];        //失败的时候调用    [request setFailedBlock:^{            }];    }

  4、同步Post请求的实现,Post请求和get不同,这里须要拼接条件。并且这次用到的类也略微不同ASIFormDataRequest,除此之外基本类似。代码例如以下:

 
ASIFormDataRequest * request=[ASIFormDataRequest requestWithURL:url];    //设置请求參数    [request setPostValue:@"jereh" forKey:@"userName"];    [request setPostValue:@"123" forKey:@"pwd"];    request.timeOutSeconds=3;        [request startSynchronous];

  5、异步的Post请求我就不用说了吧?相信大家能写出来

  6、下载,在涉及到网络的时候必定涉及到网络的下载和上传。ASI对文件的下载封装的很好,我们用起来很的简单。以下我们通过一个进度条显示下载进度,效果图例如以下:

 

 
- (void)asyncDowload{    NSURL * url=[NSURL URLWithString:@"http://192.168.1.107/test.rar"];    ASIHTTPRequest * request=[ASIHTTPRequest requestWithURL:url]; NSString * path=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];path=[path stringByAppendingPathComponent:@"test.rar"];  //设置下载路径    request.downloadDestinationPath=path;    //支持断点续传    request.allowResumeForFileDownloads=YES;    //设置下载代理。将代理设置为progress对象就可以    request.downloadProgressDelegate=circle;    [request startAsynchronous];}

  7、文件的上传和下载类似,可是须要注意的事情是,上传须要往server发送东西。既然须要向server传递东西就涉及到POST,用get的方式是直接获取的,没法传值因此,上传须要用到类ASIFormDataRequest。操作和上面讲到的Post提交类似,只是这里注意的是,既然须要传递东西。就要调用传递东西的方法就可以。

在这里我们有三个方法

1 直接设置文件,其它默认

[request setFile:path forKey:@"file"];

2 设置文件,同一时候设置目的文件名和类型

[request setFile:path withFileName:@"asiImg1.png" andContentType:@"image/png" forKey:@"file"];

3 设置二进制文件,同一时候设置目的文件名和类型

[request setData:data withFileName:@"t.png" andContentType:@"image/png" forKey:@"file"];

 

  想要了解很多其它内容的小伙伴,能够点击,亲自执行測试。

  疑问咨询或技术交流,请增加官方QQ群: (452379712)

 

作者:
出处:
 
本文版权归和CSDN共同拥有,欢迎转载。但未经作者允许必须保留此段声明。且在文章页面明显位置给出原文连接。否则保留追究法律责任的权利。
 
你可能感兴趣的文章
Python黑客编程之信息收集
查看>>
Django+ PowerShell 管理AD系统
查看>>
leopard ich7 alc 888 driver
查看>>
开始学习Docker啦--容器理论知识(一)
查看>>
流数据库 概率计算概念 - PipelineDB-Probabilistic Data Structures & Algorithms
查看>>
Java注解不完全总结
查看>>
解决“此电脑上没有安装True Speech声音解码器”的方法
查看>>
Win08R2变脸Win7第一招配置Owner信息
查看>>
远程桌面连接 详细图解
查看>>
Linux下查看文件和文件夹大小
查看>>
redis总结
查看>>
CsGL着色的三角形
查看>>
后端码农谈前端(CSS篇)第七课:定位与浮动
查看>>
springboot(十八):使用Spring Boot集成FastDFS
查看>>
何勉:第一性原理和精益敏捷的规模化实施
查看>>
HDFS 文件格式——SequenceFile RCFile
查看>>
处理 Oracle SQL in 超过1000 的解决方案
查看>>
精致的JS提示
查看>>
Visual Studio.Net 2005中用SqlDataSource处理数据库特殊数据类型
查看>>
MySQL---数据库从入门走向大神系列(十四)-ComboPooledDataSource(C3P0连接池配置)
查看>>