使用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群:

idkey=69fd2f84c1212ecb10062430746aa802c93431c006c1d8cd8c34c5dd4f14772d" target="_blank"> (452379712)

作者:杰瑞教育

出处:http://blog.csdn.net/jerehedu/ 

本文版权归烟台杰瑞教育科技有限公司和CSDN共同拥有,欢迎转载。但未经作者允许必须保留此段声明。且在文章页面明显位置给出原文连接。否则保留追究法律责任的权利。
 

ASI简单实现网络编程的更多相关文章

  1. 【Java】简单了解网络编程

    文章目录 网络编程 网络编程中有两个主要的问题 网络编程中的两个要素 通信要素一:IP和端口号 实例化InetAddress 两个常用方法 端口号 通信要素二:网络通信协议 实现TCP的网络编程 例子 ...

  2. Python简单的网络编程

    OSI 模型介绍 应用层 -- 对接受的数据进行解释.加密与解密.压缩与解压缩 会话层 -- 通过传输层(端口号: 传输端口和接受端口) 建立数据传输的通路 传输层 -- 定义了一些传输数据的协议和端 ...

  3. linux简单命令---网络编程

    ---------------------------------------------------------------------------------------------------- ...

  4. python 网络编程

    一.网络知识的一些介绍 socket是网络连接端点.例如当你的Web浏览器请求www.pythontik.com上的主页时,你的Web浏览器创建一个socket并命令它去连接www.pythontik ...

  5. JAVA的网络编程

    网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...

  6. JAVA网络编程【转】出处不详

    网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...

  7. 【转】JAVA之网络编程

    转自:火之光 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者 ...

  8. JAVA的网络编程【转】

    JAVA的网络编程[转] Posted on 2009-12-03 18:04 火之光 阅读(93441) 评论(20) 编辑 收藏 网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能, ...

  9. Java学习之网络编程实例

    转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一 ...

随机推荐

  1. Robot Framework: 自定义自己的python库

    利用Robot Framework编写测试用例,往往需要开发自己的关键字,有的关键字需要通过自己编写python代码来实现.这在rf中,就需要自己定义python库.这个过程其实不复杂,本文来介绍下. ...

  2. bzoj 1901: Zju2112 Dynamic Rankings(树套树)

    1901: Zju2112 Dynamic Rankings 经典的带改动求区间第k小值问题 树套树模板,我是用的线段树套splay实现的,并且用的数组模拟的,所以可能空间略大,bzoj过了,zoj过 ...

  3. codeforces #267 C George and Job(DP)

    职务地址:http://codeforces.com/contest/467/problem/C 太弱了..这题当时都没做出来..思路是有的,可是自己出的几组数组总是过不去..今天又又一次写了一遍.才 ...

  4. How to Create Dump File for Applications

    使用WinDBG这个工具,可以在应用程序异常终止或者无响应时获取它的尸体,以用来解剖研究. Creating Dump File      在Vista环境中抓取Dump文件很方便,在task man ...

  5. mysql死锁问题分析(转)

    线上某服务时不时报出如下异常(大约一天二十多次):“Deadlock found when trying to get lock;”. Oh, My God! 是死锁问题.尽管报错不多,对性能目前看来 ...

  6. <Win32_12>程序员求爱的创意程序——升级版^_^

    前段时间,我编写了一个创意程序,并用于向自己目前的女朋友表白,结果效果还不错,得到了她的芳心. 于是我将自己的创意程序共享到csdn资源上,大多数网友认为创意不错,就是简单了些——呵呵,其实我个人也这 ...

  7. Appium 的安装启动

    Appium 的安装方式根据官网提供的是使用nodejs 安装,但是官方给出了三种方法 参考网址: appium下载地址: https://bitbucket.org/appium/appium.ap ...

  8. QString与char*的相互转换

    原地址:http://blog.sina.com.cn/s/blog_5c70dfc80100r0nh.html 一.QString转char*   QString str; int num=0; s ...

  9. JSP的学习(6)——九大隐式对象及其out对象

    本篇将介绍JSP中的九大隐式对象,并重点介绍其中的out对象. 我们在之前的博客<JSP的学习(1)——基础知识与底层原理>一文中已经知道,JSP最终要被翻译和转换成Servlet,在转换 ...

  10. DRP分销系统总结

    上个月看完的分销系统的视频,用了漫长的时间看这个项目视频,能安慰自己的是不光是看视频了,还做了很多自己想做的事情,比如驾照拿下来了,比如参加了一些考试,比如讲了一些课程等等.把这个系统的总结总算是补上 ...