首先,可以去官方网站下载源码:https://allseeing-i.com/ASIHTTPRequest/
将如下的文件加载到项目中去,值得注意的是这些代码并没有使用ARC,如果要在ARC模式下使用,所以要在Build Phases的文件里添加-fno-objc-arc标记。
ASIHTTPRequestConfig.h
ASIHTTPRequestDelegate.h
ASIProgressDelegate.h
ASICacheDelegate.h
ASIHTTPRequest.h
ASIHTTPRequest.m
ASIDataCompressor.h
ASIDataCompressor.m
ASIDataDecompressor.h
ASIDataDecompressor.m
ASIFormDataRequest.h
ASIInputStream.h
ASIInputStream.m
ASIFormDataRequest.m
ASINetworkQueue.h
ASINetworkQueue.m
ASIDownloadCache.h
ASIDownloadCache.m
ASIAuthenticationDialog.h
ASIAuthenticationDialog.m
Reachability.h (在源码的 External/Reachability 目录下)
Reachability.m (在源码的 External/Reachability 目录下)
除此之外还需要添加::CFNetwork.framework,SystemConfiguration.framework, MobileCoreServices.framework,CoreGraphics.framework和libz.1.2.3.dylib
用法就超级简单了:
NSURL *url = [NSURL URLWithString:@"http://book.huyingread.com:9999/httpservice?cmd=getusertimer&uid=107355342&at=j4tvVXmsAU2sck9NxBzb2y6N94cEUrIg5xwN1icq1jE%3D&v=2.2.5.800&sign=bb364955bf94dc37c0a0dbc101244570"];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDelegate:self];
//同步请求
// [request startSynchronous];
//异步请求
[request startAsynchronous];
应该尽量优先异步请求,否则主线程可能会卡死。
//asihttp返回的数据
- (void)requestFinished:(ASIHTTPRequest *)request
{
// 当以文本形式读取返回内容时用这个方法
// NSString *responseString = [request responseString];
//有中文的xml格式
NSString *responseString = [[NSString alloc] initWithData:[request responseData] encoding:NSUTF8StringEncoding];
if (responseString != nil && responseString.length > 0) {
//一般收到xml,json的数据
NSData* xmlData = [responseString dataUsingEncoding:NSUTF8StringEncoding];
//用nsxml解析数据
NSXMLParser * parser = [[NSXMLParser alloc]initWithData:xmlData];
[parser setDelegate:self];
[parser parse];
NSLog(@"%@",xmlData);
}else{//一般是收到图片数据等2进制数据
NSData *responseData = [request responseData];
UIImage *image = [UIImage imageWithData: responseData];
myImageView.image = image;
}
}
//返回错误码。
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error = [request error];
}
********************/NSXMLParser解析/
NSData* xmlData = [responseString dataUsingEncoding:NSUTF8StringEncoding];
//用nsxml解析数据
NSXMLParser * parser = [[NSXMLParser alloc]initWithData:xmlData];
[parser setDelegate:self];
[parser parse];
//设置以后就会进行回调
//开始进行解析,一般进行些初始化的操作。
- (void)parserDidStartDocument:(NSXMLParser *)parser {
dataDict = [[NSMutableDictionary alloc] initWithCapacity:0]; //每一条信息都用字典来存储
}
//发现元素开始符的处理函数
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
}
//处理标签包含内容字符
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
//记录所取得的文字列
parserString = string;
}
//发现元素结束符的处理函数,保存元素各项目数据(即报告元素的结束标记)
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
[dataDict setObject:parserString forKey:elementName];
NSLog(@"%@",dataDict);
}
//报告不可恢复的解析错误
- (void)requestFailed:(ASIHTTPRequest *)request
{
NSError *error = [request error];
}
//报告解析的结束
- (void)parserDidEndDocument:(NSXMLParser *)parser{
NSLog(@"over");
}