iOS使用协议代理封装系统下载HttpRequest
2014-05-14 17:02
661 查看
//构思:
//1.首先需要一个外界传来的url //2.使用代理把异步请求下来的数据回调 // 回调又有两种情况:(1).请求成功回调 (2).请求失败回调(网络请求失败),所以要设置两个代理方法 //3.还要考虑的是:如果有多个请求 那么用什么区分这些请求呢,所以要设置一个tag属性,来区分不同的请求 //4.调用这个请求 还需要一个开始指令
HttpRequest.h中
#import <Foundation/Foundation.h> @class HttpRequest; //设置协议 里面有两种方法(成功or失败) @protocol HttpRequestDelegate <NSObject> //成功 -(void)HttpRequestDidFinish:(HttpRequest *)request Data:(NSData *)data; //失败 -(void)HttpRequestDidFail:(HttpRequest *)request; @end @interface HttpRequest : NSObject<NSURLConnectionDataDelegate>{ NSMutableData * _mData;//顶一个可变数据来接收下载的数据 } @property (nonatomic,assign)int tag; @property (nonatomic,copy)NSString * url; //设置代理 @property (nonatomic,assign)id<HttpRequestDelegate>delegate; //开始指令 -(void)startRequest; @end
HttpRequest.m中
#import "HttpRequest.h" @implementation HttpRequest - (void)dealloc { [_mData release]; [super dealloc]; } -(id)init{ if (self = [super init]) { _mData = [[NSMutableData alloc]init]; } return self; } -(void)startRequest{ //通过传过来的url创建链接 NSURL * url = [NSURL URLWithString:self.url]; //创建请求 NSURLRequest * request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:300]; //开始请求 [NSURLConnection connectionWithRequest:request delegate:self]; } //接收响应头 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ //在状态栏显示一个圈圈转动 代表正在请求 [UIApplication sharedApplication].networkActivityIndicatorVisible = YES; } //接收响应体 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ [_mData appendData:data];//把接收的一片片的数据拼接 } //接收完成 -(void)connectionDidFinishLoading:(NSURLConnection *)connection{ //把状态栏的圈圈关闭 [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; //如果代理响应了协议中的方法 if ([self.delegate respondsToSelector:@selector(HttpRequestDidFinish:Data:)]) { [self.delegate HttpRequestDidFinish:self Data:_mData]; }else{ NSLog(@"代理的完成方法未响应"); } } //接收失败 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; if ([self.delegate respondsToSelector:@selector(HttpRequestDidFail:)]) { [self.delegate HttpRequestDidFail:self]; }else{ NSLog(@"代理的失败方法未响应"); } } @end
相关文章推荐
- 在IOS中使用ASIHTTPRequest下载(支持断点续传)
- iOS开发asi使用(五)ASIHTTPRequest断点续传(下载)
- iOS 使用ASIHTTPRequest实现图片下载,断点续传,cell自定义
- 使用 CInternetSession 封装多线程 http 文件下载
- 使用HttpWebRequest以及HttpWebResponse下载Http远程文件[转]
- 如何使用ASIHTTPRequest从iOS端向服务器上传文件?
- 解决httpwebrequest无法通过使用代理的局域网获取response的问题
- 使用CURL实现http文件下载加一个多任务的封装.
- HttpWebRequest使用有身份验证的代理
- Poco 1.4.2 HTTPClientSession/HTTPRequest 使用使用代理(proxy)需要注意的一点
- 使用HttpWebRequest从一台服务机器上下载到另一台服务器
- (转)IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- iOS 的 ASIHTTPRequest 类库简介和使用说明
- 使用 acl 较为底层的 HTTP 协议库写 HTTP 下载客户端举例
- 使用代理下载android系统源码和SDK
- 使用HttpWebRequest下载远程文件部分网站出现异常
- c# 使用HttpWebRequest,HttpWebResponse 快速验证代理IP是否有用
- HttpWebRequest 下载网页Html代码 POST方式(站内使用了form方式) System.Net.WebException (417) Expectation failed
- IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
- [ios 站在巨人的肩膀上开发 之]ASIHttpRequest 使用指南(二)