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");
}
将如下的文件加载到项目中去,值得注意的是这些代码并没有使用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");
}
相关文章推荐
- AsyncTask异步任务使用详细实例(一)+HttpClient+进度更新的设置
- Mac 有线网络或WiFi网络共享成WiFiwifi的方法
- HTTP返回值
- HttpClient上传下载Demo
- 小米手机TCP连接一些奇怪现象
- 关于文件、网络传输以及内存存储的大小端问题
- HttpClient模拟登陆
- 替换Servlet容器的HttpSession实现集群中Session共享(With Redis)
- TCP的连接建立和释放(三次握手和四次握手)
- Http协议
- IOS 使用AF网络请求统一RSA加密+URL不识别中文的解决办法
- TCP传输控制协议 读书笔记
- 关于TCP和UDP的异同点
- iOS----网络开发之第三方库AFNetworking
- [转]Linux服务器上11种网络连接状态 和 TCP三次握手/四次挥手详解
- 计算机网络之运输层
- Netscaler 10.5 VPX与XenApp XenDesktop 集成配置系列之一基本网络配置
- 【网络流+线段树】[CQBZOJ3065]生死游戏((A+B)^2 Problem)
- Linux环境下基于条件约束的HTTP/TCP透明代理和流量牵引方案
- 肖哥教你快速子网划分