强大的HTTP包装开源项目ASIHTTPRequest介绍
ASIHTTPRequest 是一个直接在CFNetwork上做的开源项目,提供了一个比官方更方便更强大的HTTP网络传输的封装。它的特色功能如下:
1,下载的数据直接保存到内存或文件系统里
2,提供直接提交(HTTP POST)文件的API
3,可以直接访问与修改HTTP请求与响应HEADER
4,轻松获取上传与下载的进度信息
5,异步请求与队列,自动管理上传与下载队列管理机
6,认证与授权的支持
7,Cookie
8,请求与响应的GZIP
9,代理请求
源码:http://www.jinhusns.com/Products/Download/?type=xcj
下面来两个ASIHTTPRequest的小例子:
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request start];
NSError *error = [request error];
if (!error) {
NSString *response = [request responseString];
}
当你需要添加更多的请求信息时,如,添加个请求Header:
[request addRequestHeader:@"name" value:@"Jory lee"];
添加Post请求时的健值:
[request setPostValue:@"Ben" forKey:@"first_name"];
[request setPostValue:@"Copsey" forKey:@"last_name"];
[request setFile:@"/Users/ben/Desktop/ben.jpg" forKey:@"photo"];
设置HTTP的授权帐号:
[request setUsername:@"username"];
[request setPassword:@"password"];
一个异步请求:
- (IBAction)grabURLInBackground:(id)sender
{
NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request startAsynchronous];
}
- (void)requestFinished:(ASIHTTPRequest *)request
{
// Use when fetching text data
NSString *responseString = [request responseString];
// Use when fetching binary data
NSData *responseData = [request responseData];
}
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error = [request error];
}
在我们数据获取的过程中,如果数据源复杂,一个请求队列是必不可少的:
- (IBAction)grabURLInTheBackground:(id)sender
{
if (![self queue]) {
[self setQueue:[[[NSOperationQueue alloc] init] autorelease]];
}
NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
[request setDidFinishSelector:@selector(requestDone:)];
[request setDidFailSelector:@selector(requestWentWrong:)];
[[self queue] addOperation:request]; //queue is an NSOperationQueue
}
- (void)requestDone:(ASIHTTPRequest *)request
{
NSString *response = [request responseString];
}
- (void)requestWentWrong:(ASIHTTPRequest *)request
{
NSError *error = [request error];
}
另外大家可以通过下面这个代码例子,看 ASIHTTP 比传统的 post 方法的方便之处
post用法
NSString *post = @"这里放要传递的参数";
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:@"请求地址"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
//[request addValue:@"gzip" forHTTPHeaderField:@"Accepts-Encoding"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:request delegate:self];
if (conn)
{
receivedbData = [[NSMutableData data] retain];
}
else
{
// inform the user that the download could not be made
}
ASIHTTP 方法
NSURL *url = [NSURL URLWithString:@"请求地址"];
//ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
ASIFormDataRequest *request=[ASIFormDataRequest requestWithURL:url];
[request setPostValue:@"值" forKey:@"参数1"];
[request setPostValue:@"值" forKey:@"参数2"];
[request start];
NSError *error = [request error];
if (!error) {
NSString *response = [request responseString];
NSLog(response);
}
相比之下,ASIHTTP 的确省了很多代码。
最新文章
- (转载)html中table的使用方法
- VS与ultraedit 正则表达式替换
- sqlserver 用户、账号、安全等问题小汇
- EXCEL导入导出自己整理的一些方法
- linux mysql 相关操作命令
- 【BZOJ 3295】动态逆序对 - 分块+树状数组
- JavaEE系列之(二)commons-fileupload实现文件上传、下载
- Ruby入门教程和技巧
- NET Core 的 Views
- 改动symbol link的owner
- Jquery和Javascript对象之间的转换
- JSR-303 Bean Validation 介绍及 Spring MVC 服务端参数验证最佳实践
- hadoop第一课
- Python之PIL库的运用、GIF处理
- 消息中间件和JMS介绍
- position的定义
- shell 命令 set命令
- 41. timestamp 字段设值
- TF30063:没有访问xxx的权限 vs2017
- 拯救U盘之——轻松修复U盘“无法访问”的故障
热门文章
- SpringMVC拦截器详解[附带源码分析]
- OOAD利器之UML基础
- 使用VS2013分析DMP文件
- SEO:让搜索引擎对你的网站更有亲和力(译)
- Redis系列(五)-Opserver的监控
- [译]Kinect for Windows SDK开发入门(十八):Kinect Interaction交互控件
- Module Zero之权限管理
- Oracle 中 union 和union all 的简单使用说明
- Java Math 取整的方式
- 【源码】Word转PDF V1.0.1 小软件,供新手参考