您的位置:首页 > 理论基础 > 计算机网络

ASIHTTPRequest的使用与NSXMLParser的解析。

2016-03-11 18:00 549 查看
首先,可以去官方网站下载源码: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");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: