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

来源:互联网 发布:telnet 端口失败解决 编辑:程序博客网 时间:2024/06/05 20:47

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。


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 结婚7年离婚孩子怎么办 合伙经营KTV股东意见不合怎么办 合伙生意转让意见不合怎么办 租完房子后悔了怎么办 通过中介买房产生纠纷怎么办 天津公租房资格证到期怎么办 买大房子后悔了怎么办 公款私存了该怎么办 外地人怎么办身份证在北京东城区 申请公租房有车怎么办 租了公租房辞职怎么办 申请公租房收入明细没有怎么办 杭州公租房满3年怎么办 小学寄读不转学籍手续怎么办 炸东西的油糊了怎么办 赠送面积为违建怎么办 执法不管违建我怎么办 司法考试毕业院校写错了怎么办 家具店西安一直拖着不交货怎么办 派出所私自迁移了我家户口怎么办? 退房子不退押金怎么办 租房子中介不退押金怎么办 租房子押金不退怎么办 外地人签户口到武汉怎么办 开发商不给办土地证怎么办 房间里的油烟味怎么办 现金借款app还不了款怎么办 学校不允许实习生自己租房怎么办 盯盯拍开不了机怎么办 向私人借钱不还怎么办 微信好友借钱不还怎么办 支付宝借不了钱怎么办 支付宝借条关了怎么办 qq群不小心解散了怎么办 qq群解散了照片怎么办 出租屋没窗户很闷怎么办 二手房交税后房主不卖怎么办 二房东收不到租拖欠房租怎么办 房东不给换门锁怎么办 租房到期房东联系不到租客怎么办 廉租房名下有车怎么办