ASIHTTPRequest系列(一):同步和异步请求

来源:互联网 发布:天注定 知乎 编辑:程序博客网 时间:2024/06/16 03:11

ASIHTTPRequest项目地址: http://github.com/pokeb/asi-http-request/tree ,关于ASIHTTPRequest到底是什么,你可以在项目首页看到。

它提供如下功能:

提交数据到web服务器或者从web服务器获得数据;

下载数据到内存或磁盘;

采用html input相同的机制上传文件;

断点续传;

简单存取HTTP头;

上传/下载进度显示;

支持Cookie;

后台运行(iOS4.0以上支持);

对于请求和响应的GZIP支持;

支持客户端证书;

支持同步/异步请求

⋯⋯

关于它的介绍网上已经有很多了,该项目有很详细的指南文档: How to use ASIHTTPRequest ,也有网友翻译成中文了。本文没有完全照搬官方文档的内容,而是着重介绍了几个常见的应用,并涵盖了一些自己的理解和实际应用经验,包括:

安装、简单异步/同步请求、队列请求、上传、下载及 Cookies

注意,虽然这些技术在本文中是分开讲述的,但在实际工作中,往往是多种技术结合应用的。

此外,Http 请求往往伴随着 XML 技术的应用,实际上 ASIHTTPRequest 是可以和 SAX 异步解析结合应用的,这部分内容请参考作者另一博文《 ASIHTTPRequest和libxml结合,实现边请求边解析》。

 

项目下载地址: http://github.com/pokeb/asi-http-request/tarball/master

下载后将文件解压缩到任意目录。

打开该目录,其目录中包含了:

一个iPhone Xcode项目(源文件)

一个Mac Xcode项目(源文件)

一个iPhone下使用的Sample Code(源文件)

一个Mac下使用的Sample Code(源文件)

一个Readme.texttile,关于该项目的介绍

其实所有的内容都在其中了,如果你是初学者,不知到怎么下手,可以看 http://allseeing-i.com/ASIHTTPRequest/How-to-use

这里有一份详细的入门指南。

现在,我们要做的就是,在自己的项目中使用它。

一、在项目中使用ASIHTTPRequest

1、拷贝源文件到项目中

ASIHTTPRequest 是一个开源项目,要使用他,直接拷贝项目源文件到你的项目中,包括下列文件(即Classes下所有文件和External/Reachability下所有文件):

  • ASIHTTPRequestConfig.h
  • ASIHTTPRequestDelegate.h
  • ASIProgressDelegate.h
  • ASICacheDelegate.h
  • ASIHTTPRequest.h
  • ASIHTTPRequest.m
  • ASIDataCompressor.h
  • ASIDataCompressor.m
  • ASIDataDecompressor.h
  • ASIDataDecompressor.m
  • ASIFormDataRequest.h
  • ASIInputStream.h
  • ASIInputStream.m
  • ASIFormDataRequest.m
  • ASINetworkQueue.h
  • ASINetworkQueue.m
  • ASIDownloadCache.h
  • ASIDownloadCache.m

对于 iPhone,还要拷贝下列文件:

  • ASIAuthenticationDialog.h
  • ASIAuthenticationDialog.m
  • Reachability.h (External/Reachability 目录 )
  • Reachability.m (External/Reachability 目录 )

 

2、添加依赖库

ASIHTTPRequest 依赖于以下5个框架或库:

CFNetwork, SystemConfiguration, MobileCoreServices, CoreGraphics 和 libz1.2.3。

依次将上述库和框架添加到 target 的 Linked Libraries 中。

二、简单的同步请求示例

新建 iOS 项目,加入必需的源文件和 Linked Libraries。

往 MainWindow.xib 中添加一个 UIView和一个 UIButton,在 delegate 中添加相应的出口并在IB中进行连接。

编写按钮的Touch up inside代码,并连接到UIButton:

-( IBAction )goURL{

NSURL *url = [ NSURL URLWithString : @"http://localhost/interface/GetDept" ];

// 构造 ASIHTTPRequest 对象

ASIHTTPRequest *request = [ ASIHTTPRequest requestWithURL :url];

// 开始同步请求

[request startSynchronous ];

NSError *error = [request error ];

assert (!error);

// 如果请求成功,返回 Response

NSString *response = [request responseString ];

NSLog ( @"%@" ,response);

}

别忘了在适当的地方导入ASIHTTPRequest: #import "ASIHTTPRequest.h"

分别保存IB和Xcode中所做的更改, ⌘+B 编译。

三、简单的异步请求示例

将上述代码修改为:

-( IBAction )goURL{

NSURL *url = [ NSURL URLWithString : @"http://localhost/interface/GetDept" ];

ASIHTTPRequest *request = [ ASIHTTPRequest requestWithURL :url];

// 设定委托,委托自己实现异步请求方法

[request setDelegate : self ];

// 开始异步请求

[request startAsynchronous ];

}

并实现一系列委托方法:

// 请求结束,获取 Response 数据

- ( void )requestFinished:( ASIHTTPRequest *)request

{

NSString *responseString = [request responseString ]; // 对于 2 进制数据,使用: NSData *responseData = [request responseData];

NSLog ( @"%@" ,responseString);

button . enabled = YES ;

}

// 请求失败,获取 error

- ( void )requestFailed:( ASIHTTPRequest *)request

{

NSError *error = [request error ];

NSLog ( @"%@" ,error. userInfo );

button . enabled = YES ;

}

从OS X 10.6及iOS 4.0起,支持块语法,你也可以使用块语法调用ASIHTTPRequest:

-( IBAction )goURL{

NSURL *url = [ NSURL URLWithString : @"http://localhost/interface/GetDept" ];

__block ASIHTTPRequest *request = [ ASIHTTPRequest requestWithURL :url];

// ASIHTTPRequest 支持 iOS 4.0 的块语法,你可以把委托方法定义到块中

[request setCompletionBlock :^{

// 请求响应结束,返回 responseString

NSString *responseString = [request responseString ]; // 对于 2 进制数据,使用 NSData 返回NSData *responseData = [request responseData];

NSLog ( @"%@" ,responseString);

}];

[request setFailedBlock :^{

// 请求响应失败,返回错误信息

NSError *error = [request error ];

NSLog ( @"error:%@" ,[error userInfo ]);

}];

[request startAsynchronous ];

}

如果你不熟悉O-C的块语法,请参考作者另一篇博文 《块编程指南》 ,或者Apple Reference Library。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 c1本扣满12分怎么办 太原公共自行车丢了怎么办 在太原出租车丢了东西怎么办 太原社保卡丢了怎么办 太原铁路医保卡丢了怎么办 学车体检视力不合格怎么办 换驾照色弱被拒怎么办 在上海考驾照贵怎么办 驾驶证有效期过了半年怎么办 资格证脱审2年了怎么办 换驾驶证时眼睛近视了怎么办 违章累计扣12分怎么办 一个违章扣12分怎么办 a1驾照扣3分怎么办 a1驾照扣12分怎么办 吃了毓婷哺乳了怎么办 吃了毓婷后出血怎么办 吃金毓婷喝了水怎么办 白带浓稠浆糊样怎么办 驾校学费不给退怎么办 b1驾证扣了9分怎么办 机动车登记证丢了怎么办 b1驾照扣了9分怎么办 听力正常体检不过关怎么办 做完人流第二天同房了怎么办 医院的票据丢了怎么办 体检人体成分(脂肪缺乏)该怎么办 诊断出右下叶肺炎怎么办 做胸透穿钢圈内衣怎么办 预约不上留学体检怎么办 跨省离职后社保怎么办 开车到成都限号怎么办 月经量多怎么办吃什么 报驾校体检视力不达标怎么办 换驾驶证c1一只眼不合格怎么办 考驾照紧张腿抖怎么办 驾照该换了色弱怎么办 怀孕5个月感冒咳嗽怎么办 怀孕4个月喉咙痛怎么办 怀孕5个多月总是咳嗽尿失禁怎么办 怀孕7个月感冒了怎么办