您的位置:首页 > 理论基础 > 计算机网络

HTTP 终结者 ASI

2015-10-31 11:42 573 查看
一、发送请求的2个对象

1.发送GET请求:ASIHttpRequest

2.发送POST请求:ASIFormDataRequest

* 设置参数

// 同一个key只对应1个参数值,适用于普通“单值参数”

- (void)setPostValue:(id <NSObject>)value forKey:(NSString *)key

// 同一个key(同一个参数名),会对应多个参数值,适用于“多值参数”

- (void)addPostValue:(id <NSObject>)value forKey:(NSString *)key

二、发送请求

1.同步请求

* startSynchronous

2.异步请求

* startAsynchronous

三、监听请求的过程

1.如何监听请求过程

1>
为代理,遵守ASIHTTPRequestDelegate协议,实现协议中的代理方法

request.delegate = self;

- (void)requestStarted:(ASIHTTPRequest *)request;

- (void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders;

- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data;

- (void)requestFinished:(ASIHTTPRequest *)request;

- (void)requestFailed:(ASIHTTPRequest *)request;

2>
成为代理,不遵守ASIHTTPRequestDelegate协议,自定义代理方法

request.delegate = self;

[request setDidStartSelector:@selector(start:)];

[request setDidFinishSelector:@selector(finish:)];

3>
设置block

[request setStartedBlock:^{

NSLog(@"setStartedBlock");

}];

[request setHeadersReceivedBlock:^(NSDictionary *responseHeaders) {

NSLog(@"setHeadersReceivedBlock--%@", responseHeaders);

}];

[request setDataReceivedBlock:^(NSData *data) {

NSLog(@"setDataReceivedBlock--%@", data);

}];

[request setCompletionBlock:^{

NSLog(@"setCompletionBlock");

}];

[request setFailedBlock:^{

NSLog(@"setFailedBlock");

}];

2.监听的使用注意

* 如果同时设置了block和实现了代理方法,请求过程中,block和代理方法都会调用

* 一般的调用顺序:代理方法 > block

3.如果实现了下面的代理方法,那么responseData\responseString就没有值

- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data;

四、文件下载

1.一般的下载

1>
设置文件下载的保存路径

request.downloadDestinationPath = filepath;

2>
设置进度监听的代理(要想成为进度监听代理,最好遵守ASIProgressDelegate协议)

request.downloadProgressDelegate = self.progressView;

2.断点下载(断点续传)

1>
设置文件下载的临时路径

request.temporaryFileDownloadPath = tempFilepath;

2>
设置支持断点续传

request.allowResumeForFileDownloads = YES;

五、文件上传(设置文件参数)

1.如果知道文件路径,最好就用这个方法(因为简单)

// ASI内部会自动识别文件的MIMEType

[request setFile:file forKey:@"file"];

[request addFile:file forKey:@"file"];

[request setFile:file withFileName:@"basic.pptx" andContentType:@"application/vnd.openxmlformats-officedocument.presentationml.presentation" forKey:@"file"];

// .....

2.如果文件数据是动态产生的,就用这个方法(比如刚拍照完获得的图片数据)

[request setData:data withFileName:@"test.png" andContentType:@"image/png" forKey:@"file"];

六、ASIHttpRequest的常见用法

1.请求超时

@property (atomic,
assign) NSTimeInterval timeOutSeconds;

2.获得错误信息

@property (atomic,
retain) NSError *error;

3.获得响应数据

// 状态码

@property (atomic,
assign,readonly)
int responseStatusCode;

// 状态信息

@property (atomic,
retain,readonly) NSString *responseStatusMessage;

// 服务器返回的具体数据(NSString格式)

- (NSString *)responseString;

// 服务器返回的具体数据(NSData格式)

- (NSData *)responseData;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: