标签:"ASIHTTPRequest"

ASIHTTPRequest-Debug选项

ASIHTTPRequest提供少量的有助于调试request行为的宏标记。这些宏可以从ASIHTTPRequestConfig.h文件中找到。
当打开这些标志时,request将会打印一些信息到控制台,显示它们正在做什么。
DEBUG_REQUEST_STATUS
打印request的生命周期的所有信息,开始,结束上载,结束下载。
DEBUG_THROTTLING
打印request使用了多少流量(大致),如果request的流量被控制,打印如何被控制。当与DEBUG_REQUEST_STATUS结合使用时,这一项可以用来调试“超时”,你可以看到request停止发送或接收数据的时间点。
DEBUG_PERSISTENT_CONNECTIONS

ASIHTTPRequest-使用代理连接

ASIHTTPRequest检测系统的proxy设置并自动将proxy用于request。从1.0.6版本开始,它还支持PAC文件和要求授权的proxy。
默认情况下,ASIHTTPRequest将尝试自动检测proxy设置。当然,你可以看自己手动设置:
// 手动设置代理服务器
NSURL *url = [NSURL URLWithString:@"http://www.dreamingwish.com"];
ASIHTTPRequest *request =

ASIHTTPRequest-流量控制

从1.0.7版本开始,ASIHTTPRequest可以控制流量,使得所有request的流量不会超过用户定义的限制范围。这可以使得发送/接收大量数据的iphone程序更容易通过苹果的app store的审核。
流量是由一个全局的数量限制(字节)来控制的——每秒钟可以传送多少流量的数据。所有request共享这个限制。在发送或接收数据时,ASIHTTPRequest保持追踪上一秒所发送/接收的数据量。如果一个request达到了限制,其他正在执行的request将会等待。 在iOS上,你可以让ASIHTTPRequest在使用WWAN (GPRS/Edge/3G) 连接时自动打开流量控制,而当使用WiFi连接时自动关闭流量限制。
// 这将会对WWAN连接下的request进行流量控制(控制到预定义的值)
// Wi-Fi连接下的 request不会受影响
//

ASIHTTPRequest-使用download cache


从1.8版本开始,ASIDownloadCache和ASICacheDelegate的API改变了,你可能需要修改你的代码。
尤其是,cache策略的可用选项发生了改变,你现在可以对单一request使用结合的cache策略

ASIHTTPRequest可以自动缓存下载的数据。在很多情况下这很有用:

当你离线时,你无法再次下载数据,而你又需要访问这些数据

ASIHTTPRequest-直接读取磁盘数据流的请求体

从0.96版本开始,ASIHTTPRequest可以使用磁盘上的数据来作为请求体。这意味着不需要将文件完全读入内存中,这就避免的当使用大文件时的严重内存消耗。
使用这个特性的方法有好几种:
ASIFormDataRequests
NSURL *url = [NSURL URLWithString:@"https://www.dreamingwish.com/"];
ASIFormDataRequest *request =

ASIHTTPRequest-数据压缩

使用gzip来处理压缩的响应数据
从0.9版本开始,ASIHTTPRequest会提示服务器它可以接收gzip压缩过的数据。
许多web服务器可以在数据被发送之前压缩这些数据——这可以加快下载速度减少流量使用,但会让服务器的cpu(压缩数据)和客户端(解压数据)付出代价。总的来说,只有特定的几种数据会被压缩——许多二进制格式的文件像jpeg,gif,png,swf和pdf已经压缩过他们的数据了,所以向客户端发送这些数据时不会进行gzip压缩。文本文件例如网页和xml文件会被压缩,因为它们通常有大量的数据冗余。
 
怎样设置apache的mod_deflate来使用gzip压缩数据
apache 2.x以上版本已经配备了mod_deflate扩展,这使得apache可以透明地压缩特定种类的数据。要开启这个特性,你需要在apache的配置文件中启用mod_deflate。并将mod_deflate命令添加到你的虚拟主机配置或者.htaccess文件中。

ASIHTTPRequest-Cookie的使用

持久化cookie
ASIHTTPRequest允许你使用全局存储来和所有使用CFNetwork或者NSURLRequest接口的程序共享cookie。
如果设置useCookiePersistence为YES(默认值),cookie会被存储在共享的 NSHTTPCookieStorage 容器中,并且会自动被其他request重用。值得一提的是,ASIHTTPRequest会向服务器发送其他程序创建的cookie(如果这些cookie对特定request有效的话)。
你可以清空session期间创建的所有cookie:
[ASIHTTPRequest setSessionCookies:nil];
这里的‘session

ASIHTTPRequest-身份验证

你可以查阅ASIHTTPRequest授权流程图来了解ASIHTTPRequest如何找到授权凭据,并将授权凭据应用到request上。
为URL指定要使用的用户名和密码
NSURL *url = [NSURL URLWithString:@"https://www.dreamingwish.com/"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

ASIHTTPRequest-下载数据

将服务器响应数据直接下载到文件
如果你请求的资源很大,你可以直接将数据下载到文件中来节省内存。此时,ASIHTTPRequest将不会一次将返回数据全部保持在内存中。
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadDestinationPath:@"/Users/ben/Desktop/my_file.txt"];
当我们把数据下载到downloadDestinationPath时,数据将首先被存在临时文件中。此时文件的路径名存储在temporaryFileDownloadPath中(梦维:如果不设置这个值,会自动生成一个文件名,在模拟器中,文件被创建在$TMPDIR中)。当request完成时,会发生下面两件事之一:

ASIHttpRequest-创建和执行request

同步请求
同步请求会在当前线程中执行,使用error属性来检查结束状态(要下载大文件,则需要设定downloadDestinationPath来保存文件到本地):
- (IBAction)grabURL:(id)sender
{
NSURL *url = [NSURL URLWithString:@"http://www.dreamingwish.com"];

ASIHttpRequest的requestFinish代理函数到底在什么线程执行

用ASIHttpRequest进行异步加载数据时,加载成功后会调用代理函数
- (void)requestFinished:(ASIHTTPRequest *)request
开始我以为会在当前线程中执行,后来发现有时是,有时会跑到主线程中执行,这问题一直纠结至今。
今天使劲google一番,终于得到结果,在ASIHTTPRequest.m文件中有这么一段
- (void)requestFinished