ASIHTTPRequest框架是基于Object-C的优秀的第三方HTTP框架,支持Mac OS X和ios下的HTTP开发,其技术支持网站是http://allseeing-i.com/ASIHTTPRequest/
该框架的特点:
1、容易访问请求和应答HTTP头
2、支持cookie
3、支持gzip请求或者应答
4、支持缓存
5、支持同步或者异步请求
6、支持HTTPS
7、不支持ARC技术
该框架在项目中的配置如下图所示:
如果使用ASIHTTPRequest 提示#import <libxml/HTMLparser.h>找不到,可以按照下图进行进一步配置:
也就是在header search path 加入 ${SDK_DIR}/usr/include/libxml2 这句话,即可解决问题。
下面是代码演示:
// ASIHTTPRequest--同步GET(Synchro GET)
- (void)SynchroGET:(id)sender
{
NSString *str = [NSString stringWithFormat:@"http://iosbook1.com/service/mynotes/webservice.php?email=%@&type=%@&action=%@",@"chenximincool@163.com",@"JSON",@"query"];
NSURL *url = [NSURL URLWithString:str];
// GET使用ASIHTTPRequest
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous]; // 同步GET
NSLog(@"请求完成!");
NSError *error = [request error];
if (!error)
{
NSData *data = [request responseData];
NSLog(@"%@",data);
}
}
// ASIHTTPRequest--异步GET(Asynchro GET)
- (void)AsynchroGET:(id)sender
{
NSString *str = [NSString stringWithFormat:@"http://iosbook1.com/service/mynotes/webservice.php?email=%@&type=%@&action=%@",@"chenximincool@163.com",@"JSON",@"query"];
NSURL *url = [NSURL URLWithString:str];
// GET使用ASIHTTPRequest
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous]; // 异步GET
}
// ASIFormDataRequest--同步POST(Synchro POST)
- (void)SynchroPOST:(id)sender
{
NSString *str = [NSString stringWithFormat:@"http://iosbook1.com/service/mynotes/webservice.php"];
NSURL *url = [NSURL URLWithString:str];
// POST使用ASIFormDataRequest
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:@"chenximincool@163.com" forKey:@"email"];
[request setPostValue:@"JSON" forKey:@"type"];
[request setPostValue:@"query" forKey:@"action"];
[request startSynchronous]; // 同步POST
NSLog(@"请求完成!");
NSError *error = [request error];
if (!error)
{
NSData *data = [request responseData];
NSLog(@"%@",data);
}
}
// ASIFormDataRequest--异步POST(Asynchro POST)
- (void)AsynchroPOST:(id)sender
{
NSString *str = [NSString stringWithFormat:@"http://iosbook1.com/service/mynotes/webservice.php"];
NSURL *url = [NSURL URLWithString:str];
// POST使用ASIFormDataRequest
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:@"chenximincool@163.com" forKey:@"email"];
[request setPostValue:@"JSON" forKey:@"type"];
[request setPostValue:@"query" forKey:@"action"];
[request setDelegate:self];
[request startAsynchronous]; // 异步POST
}
// 异步代理
- (void)requestStarted:(ASIHTTPRequest *)request
{
NSLog(@"requestStarted");
}
- (void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders
{
NSLog(@"didReceiveResponseHeaders");
}
- (void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data
{
NSLog(@"didReceiveData");
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSLog(@"requestFailed");
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
NSData *data = [request responseData];
NSLog(@"data:%@",data);
NSLog(@"requestFinished");
}
// ASINetworkQueue--多线程并发请求
- (void)NetworkQueue:(id)sender
{
if (!_networkQueue)
{
_networkQueue = [[ASINetworkQueue alloc] init];
}
[_networkQueue cancelAllOperations]; // 停止以前的队列
// 创建ASI队列和设置各种回调函数
[_networkQueue setDelegate:self];
[_networkQueue setRequestDidStartSelector:@selector(customRequestStarted:)];
[_networkQueue setRequestDidReceiveResponseHeadersSelector:@selector(customRequestReceivedResponseHeaders:)];
[_networkQueue setRequestDidFailSelector:@selector(customRequestFailed:)];
[_networkQueue setRequestDidFinishSelector:@selector(customRequestFinished:)];
for (int i = 0; i < 3; i ++)
{
NSString *str = [NSString stringWithFormat:@"http://iosbook1.com/service/download.php?email=%@&FileName=test%d.jpg",@"chenximincool@163.com",i];
NSURL *url = [NSURL URLWithString:str];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
request.tag = i;
[_networkQueue addOperation:request];
}
[_networkQueue go]; // 开始并发请求
}
- (void)customRequestStarted:(ASIHTTPRequest *)request
{
NSLog(@"customRequestStarted");
}
- (void)customRequestReceivedResponseHeaders:(ASIHTTPRequest *)request
{
NSLog(@"customRequestReceivedResponseHeaders");
}
- (void)customRequestFailed:(ASIHTTPRequest *)request
{
NSLog(@"customRequestFailed");
NSError *error = [request error];
NSLog(@"%@",[error localizedDescription]);
}
- (void)customRequestFinished:(ASIHTTPRequest *)request
{
NSData *data = [request responseData];
NSLog(@"customRequestFinished--data:%@",data);
}
至此,ASIHTTPRequest框架介绍完毕,其余类似的第三方HTTP框架也是同样的使用道理,可以触类旁通。