使用iOS SDK中的HTTP网络请求API,相当的复杂,调用很繁琐,ASIHTTPRequest就是一个对CFNetwork API进行了封装,并且使用起来非常简单的一套API.
安装:
1,下载ASIHTTPRequest,加入到工程中
2,加入libz.dylib,MobileCoreServices,SYstemConfiguration,CFNetwork框架。
实例:
发送一个同步请求:
- (IBAction)tipButton:(id)sender {
NSLog(@"ButtonPressed");
NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request startSynchronous];
NSError *error = [request error];
if (!error) {
NSString *response = [request responseString];
NSLog(@"response = %@",response);
}
else{
NSLog(@"ASIHTTPRequest error");
}
}
首先请求要有一个ASIHTTPRequest的对象,开始调用startSynchronize方法。如果请求没有错误,开始接收数据。
以文本形式接收数据用responseString,以二进制形式接收数据用responseData。
发送一个异步请求:
//点击按钮,调用按钮响应函数,开始异步请求
-(IBAction)tipButton:(id)sender{
NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];
}
异步请求方式稍微麻烦了一点,第一步要设置代理,然后开始异步请求。请求开始时,代理会调用下面方法:
//请求开始调用的第一个方法
-(void)requestStarted:(ASIHTTPRequest *)request{
NSLog(@"request start");
}
请求开始以后,服务器返回数据,首先是返回文件头,调用下面方法:
//先收到头儿,然后收到数据。
-(void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders{
}
开始接收数据,
//请求的数据是分批收到的,所以这个方法被连续调用
-(void)request:(ASIHTTPRequest *)request didReceiveData:(NSData *)data{
NSLog(@"did receive data");
}
请求结束或者出现错误时候调用下面的方法
//请求结束时候调用的方法
-(void)requestFinished:(ASIHTTPRequest *)request{
//以文本形式读取返回的数据
NSString *responseString = [request responseString];
//以二进制形式读取返回数据
NSData *data = [request responseData];
// NSLog(@"responseString = %@,responseData = %@",responseString,data);
NSLog(@"finish");
}
//请求错误时候调用这个方法
-(void)requestFailed:(ASIHTTPRequest *)request{
NSError *error = [request error];
// NSLog(@"error = %@",[error localizedDescription]);
}