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框架也是同样的使用道理,可以触类旁通。