在做项目的时候经常要知道http请求回来的文件的一些信息,这些信息通常在responseHeaders中,它是个NSDictionary类型的。
把它的内容打印出来看看http头文件都是什么,要在ASIHTTPRequest返回头儿的代理方法中进行。
//先收到头儿,然后收到数据。
-(void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders{
NSLog(@"%@",[responseHeaders description]);
}
运行,打印出来的结果是这样的:
ASIHTTPRequest_04[2696:f803] {
Connection = "Keep-Alive";
"Content-Encoding" = gzip;
"Content-Length" = 10665;
"Content-Type" = "text/html; charset=UTF-8";
Date = "Tue, 28 Aug 2012 02:42:52 GMT";
"Keep-Alive" = "timeout=2, max=100";
Server = "Apache/2.2.8 (Ubuntu) mod_ssl/2.2.22 OpenSSL/1.0.1 PHP/5.3.13";
Vary = "Accept-Encoding,User-Agent";
"X-Pingback" = "http://allseeing-i.com/Ping-Back";
"X-Powered-By" = "PHP/5.3.13";
}
我们就可以通过这些来确定我们想要的信息在NSDictionary中的key。
如,我们需要知道接收的文件的长度,可以调用Content-Length的内容,下面是求进度的例子:
//先收到头儿,然后收到数据。
-(void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders{
NSString *contentLength = [[request responseHeaders] objectForKey:@"Content-Length"];
totalLength = [contentLength intValue];
}
//请求的数据是分批收到的,所以这个方法被连续调用
-(void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data{
receivedLength = receivedLength + [data length];
NSLog(@"已经接收到了百分之%d",receivedLength * 100 / totalLength );
}
通过记录每次接收到的数据到receiveLength中,记录接收到的数据长度,除以在头文件中得到的总长度totalLenth,可以得到进度。
ASIHTTPRequest给我们提供了一个简单的图形化进度的方法,支持UIProgressView
[request setDownloadProgressDelegate:myProgressView];
上面的myProgressView是UIProgressView类型的。上面一行代码就可以在进度条中显示下载的进度了。
只学习了基本的用法,ASIHTTPRequest还支持:
1.下载的数据直接保存到内存或文件系统里
2.提供直接提交(HTTP POST)文件的API
3.可以直接访问与修改HTTP请求与响应HEADER
4.轻松获取上传与下载的进度信息
5.异步请求与队列,自动管理上传与下载队列管理机
6.认证与授权的支持
7.Cookie
8.请求与响应的GZIP
9.代理请求
等用到的时候可以取官网查看: ASIHTTPRequest 官方网站地址:http://allseeing-i.com/