ASIHTTPRequest介绍
来源:互联网 发布:阿里云的产品好吗 编辑:程序博客网 时间:2024/06/11 21:36
ASI 全称 ASIHTTPRequest,外号“HTTP终结者”,功能十分强大,基于底层的CFNetwork框架,运行效率很高,可惜作者早已停止更新,有一些潜在的BUG无人去解决,很多公司的旧项目里面都残留着它的身影,以前的很多iOS项目都是ASI + SBJson,会不会用ASI,可以算是检验是否为老牌iOS程序员的标准之一。
ASI的github地址
https://github.com/pokeb/asi-http-request
ASI的使用参考
http://www.cnblogs.com/dotey/archive/2011/05/10/2041966.html
http://www.oschina.net/question/54100_36184
发送同步请求:包含主文件 #import “ASIHTTPRequest.h”
// 1.创建请求NSURL *url = [NSURL URLWithString:@"http://192.168.1.103:8080/Server/login?username=123&pwd=123"];ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];request.timeOutSeconds = 5; // 超时// 2.发送同步请求[request startSynchronous];// 3.获得错误信息NSError *error = [request error];if (error) { NSLog(@"出错了");} else { // 获得服务器的响应 NSData *data = [request responseData];} // [request responseData]
发送异步请求:
// 1.创建请求NSURL *url = [NSURL URLWithString:@"http://192.168.1.103:8080/Server/login?username=123&pwd=123"];ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];request.timeOutSeconds = 5; // 超时// 2.设置代理request.delegate = self;// 3.发送异步请求[request startAsynchronous];// ASI通过代理的方式处理异步请求,请求成功、失败都会通知代理// 代理需要遵守ASIHTTPRequestDelegate协议
ASIHTTPRequestDelegate:
//接收到服务器的数据就调用- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data//请求失败就调用- (void)requestFailed:(ASIHTTPRequest *)request//请求成功完毕就调用- (void)requestFinished:(ASIHTTPRequest *)request//注意:应当在控制器被销毁的时候,取消请求[request clearDelegatesAndCancel];
ASI的SEL回调:
@property (atomic, assign) SEL didStartSelector;@property (atomic, assign) SEL didReceiveResponseHeadersSelector;@property (atomic, assign) SEL willRedirectSelector;@property (atomic, assign) SEL didFinishSelector;@property (atomic, assign) SEL didFailSelector;@property (atomic, assign) SEL didReceiveDataSelector;
ASI的block回调:
- (void)setStartedBlock:(ASIBasicBlock)aStartedBlock;- (void)setHeadersReceivedBlock:(ASIHeadersBlock)aReceivedBlock;- (void)setCompletionBlock:(ASIBasicBlock)aCompletionBlock;- (void)setFailedBlock:(ASIBasicBlock)aFailedBlock;- (void)setBytesReceivedBlock:(ASIProgressBlock)aBytesReceivedBlock;...typedef void (^ASIBasicBlock)(void);typedef void (^ASIHeadersBlock)(NSDictionary *responseHeaders);typedef void (^ASISizeBlock)(long long size);...
获得服务器的响应:
//获得状态码\状态信息@property (atomic, assign,readonly) int responseStatusCode;@property (atomic, retain,readonly) NSString *responseStatusMessage;//获得响应头@property (atomic, retain) NSDictionary *responseHeaders;//获得实体内容(响应体)- (NSData *)responseData;- (NSString *)responseString;
发送POST请求:包含头文件:#import “ASIFormDataRequest.h”
// 1.创建请求NSURL *url = [NSURL URLWithString:@"http://192.168.1.103:8080/MJServer/login"];ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];// 2.设置请求参数[request addPostValue:@"123" forKey:@"username"];[request addPostValue:@"123" forKey:@"pwd"];// 注意addPostValue和setPostValue的区别
文件上传:
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];// 添加普通的请求参数[request addPostValue:@"MJ" forKey:@"username"];// 添加文件参数NSString *file = [[NSBundle mainBundle] pathForResource:@"musicplayer.png" ofType:nil];[request addFile:file forKey:@"file"];// 或者UIImage *image = [UIImage imageNamed:@"musicplayer"];NSData *data = UIImagePNGRepresentation(image);[request addData:data withFileName:@"test.png" andContentType:@"image/png" forKey:@"file"];
文件上传 – 添加文件参数:
//有2种添加文件参数的方法://1、通过文件的全路径- (void)addFile:(NSString *)filePath forKey:(NSString *)key- (void)addFile:(NSString *)filePath withFileName:(NSString *)fileName andContentType:(NSString *)contentType forKey:(NSString *)key//2、通过文件的具体数据- (void)addData:(id)data withFileName:(NSString *)fileName andContentType:(NSString *)contentType forKey:(NSString *)key
文件下载:
// 设置缓存路径NSString *tmp = NSTemporaryDirectory();request.downloadDestinationPath = [tmp stringByAppendingPathComponent:@"tools.zip"];// 设置下载代理request.downloadProgressDelegate = self.progressView;//大文件支持断点续传[request setAllowResumeForFileDownloads:YES];
监听文件上传\下载进度:
//成为ASI的代理- (void)setUploadProgressDelegate:(id)newDelegate//遵守ASIProgressDelegate协议,实现协议方法- (void)setProgress:(float)newProgress;
缓存:
ASI也提供了数据缓存功能,它只对Get请求的响应数据进行缓存,被缓存的数据必需是成功的200请求,我们可以使用ASIDownloadCache类管理缓存。
常见ASIDownloadCache用法:
//取得默认的缓存对象ASIDownloadCache *cache = [ASIDownloadCache sharedCache];//设置缓存策略- (void)setDefaultCachePolicy:(ASICachePolicy)cachePolicy//设置缓存路径- (void)setStoragePath:(NSString *)path
缓存策略 - ASICachePolicy:什么时候进行缓存,缓存数据的利用方式。
默认缓存策略:如果存在未过期的缓存数据,则使用缓存;否则进行网络请求,判断服务器版本与本地版本是否一样,如果一样,则使用缓存。如果服务器有新版本,会进行网络请求,并更新本地缓存。
//与默认缓存大致一样,区别仅是每次请求都会 去服务器判断是否有更新ASIAskServerIfModifiedCachePolicy//不读取缓存数据ASIDoNotReadFromCacheCachePolicy//不缓存数据,不写缓存ASIDoNotWriteToCacheCachePolicy//如果有缓存,不管其过期与否,总会拿来使用,没有缓存就重新请求ASIOnlyLoadIfNotCachedCachePolicy//有缓存,拿来使用,如果没有缓存,请求将被取消(没有错误信息)ASIDontLoadCachePolicy//请求失败时,如果有缓存则返回缓存(经常被用来与其它选项组合使用)ASIFallbackToCacheIfLoadFailsCachePolicy
缓存某个请求:
// 设置缓存策略ASIDownloadCache *cache = [ASIDownloadCache sharedCache];[cache setDefaultCachePolicy:ASIOnlyLoadIfNotCachedCachePolicy | ASIFallbackToCacheIfLoadFailsCachePolicy];// 使用缓存[request setDownloadCache:cache];// 设置缓存的存储策略(永久存储)[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
ASIHTTPRequest缓存的存储策略:缓存需要保存多长时间
默认策略,基于session的缓存数据存储,当下次运行或[ASIHTTPRequest clearSession]时,缓存将失效(内存缓存):ASICacheForSessionDurationCacheStoragePolicy;缓存数据永久保存在本地(硬盘缓存):ASICachePermanentlyCacheStoragePolicy。
缓存所有请求:
//设置缓存策略ASIDownloadCache *cache = [ASIDownloadCache sharedCache];[cache setDefaultCachePolicy:ASIOnlyLoadIfNotCachedCachePolicy | ASIFallbackToCacheIfLoadFailsCachePolicy];//使用缓存[ASIHTTPRequest setDefaultCache:cache];
缓存的其他特性:
//设置缓存的有效期[request setSecondsToCache:60 * 60 * 24 * 7]; // 缓存7天//判断数据是否从缓存读取的BOOL useCache = [request didUseCachedResponse];
另外,实际上ASIHTTPRequest继承自NSOperation,意味着可以将多个ASIHTTPRequest放到NSOperationQueue中,同时管理多个请求,可以设置请求之间的依赖,ASIFormDataRequest继承自ASIHTTPRequest。
其他用法:
//现在是否有网络请求在处理中[ASIHTTPRequest isNetworkInUse];//当正在请求时,是否要在状态栏显示联网状态(转圈圈)[ASIHTTPRequest setShouldUpdateNetworkActivityIndicator:YES];//当应用后台运行时,是否仍然继续处理网络请求request.shouldContinueWhenAppEntersBackground = YES;//设置请求超时后重试的次数request.numberOfTimesToRetryOnTimeout = 2; // 重试2次
- ASIHTTPRequest介绍
- ASIHTTPRequest介绍
- 转载]ASIHTTPRequest使用介绍
- ASIHTTPRequest使用介绍
- ASIHTTPRequest使用介绍
- 开源库ASIHTTPRequest使用介绍
- ASIHTTPRequest 的介绍
- ASIHTTPRequest使用介绍
- ASIHTTPRequest classes介绍:
- 开源库ASIHTTPRequest使用介绍
- ASIHTTPRequest详细介绍,使用方法
- ios-ASIHTTPRequest框架介绍
- ASIHttpRequest简单介绍
- ASIHTTPRequest使用介绍 --进度显示
- ASIHTTPRequest的超详细介绍
- ASIHttpRequest的介绍及使用
- iOS开发ASIHttpRequest介绍(二)-- ASIHttpRequest发送数据
- iOS开发ASIHttpRequest介绍(三)-- ASIHTTPRequest进度追踪
- centos环境下配置多个版本的mysql
- 类的定义和实例化
- ubuntu 15.10 更改设备网卡名称为eth0 网卡
- Linux查看Nginx或者其他程序的安装目录
- iOS开发手机号判断(截止到2016年5月的所有号段)
- ASIHTTPRequest介绍
- jxl导入导出Excel
- 保存Bitmap到本地文件夹
- svn检查文件名中是否有空格
- GitHub 删除指定仓库
- 嵌入式Linux基础知识1(嵌入式Linux开发流程)
- C++面试笔记_1
- spring_scope作用域和使用外部属性文件和spEL表达式
- linux学习笔记--ipcs命令