网络小结

网络小结

Posted on February 11th, 2014


1.   网络访问的数据类型:
* JSON
特点:
     []
  表示数组
     {}
  表示字典   -   对象模型建立关系
应用非常多,基本上移动开发的主要数据传输都是 JSON

要使用 JSON ,从网络上获取到数据之后使用:

     [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:
nil ];

可以将网络数据反序列化为字典或者数组,具体转换类型,看 JSON 最外面的一个括号

===================================================================

* XML
特点:大,解析费劲
提示:因为使用的少,可以不要求掌握,等碰到时再去翻看视频及 PPT 中的流程图

要启动 XML 解析需要
===================================================================
// 1)   实例化解析器
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 2)   设置代理
parser.delegate =
  self ;
// 3 )开始解析
[parser parse];
===================================================================
     XML
解析的六个代理方法
说明:
// 1.   开始解析文档,在这里做初始化工作

1.   解析准备工作

2.3.4   三个步骤会循环执行,一直到所有的节点解析完成

2 步解析一个节点,即节点中的字典
3 步负责拼接字符串
4 步节点解析完成,可以用 KVC 直接设置对象内容

5.   用于收尾工作
6.   解析出错,需要把中间数据清除,以免造成不必要的错误

推荐技巧,可以将所有的属性设置到一个节点中的属性节点中,如此只需要第二步即可。

格式如下:
"12" index="1"]] ]]> 
<item< span="">id="1558" title="错入豪门" tag="都市言情"source="/upload/file/2013_07_4/2013718101155179.zip"author="唯一的迷蝶" updatetime="2013-6-21 11:06:17"summary="新婚之夜、她..." clicks="86945" words=""logo="/upload/pic/2013_06_5/20136211172503.png"jx="False" />



- (
void )parserDidStartDocument:(NSXMLParser *)parser
// 2.   解析一个节点
- (
void )parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
// 3.   查找节点内容,可能会多次
- (
void )parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
// 4.   节点完成
- (
void )parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
// 5.   解析完成,做收尾工作
- (
void )parserDidEndDocument:(NSXMLParser *)parser
// 6.   解析出错,清理中间数据
- (
void )parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError


===================================================================
* HTML
通常用于自己没有服务器,或者某些网络资源确实非常重要!可以实现抓取以备不时之需。

例如:省、市、地区、邮政编码、身份证的前 6 位归属

要使用 HTML 可以利用正则表达式进行解析,具体使用可以参见今天示例程序中 NSString+Regex.h

提示:以后使用可以直接在分类代码基础上使用,自行编写匹配方案即可。

要使用正则表达式步骤

1 >   指定匹配方案
*
  打开网页源代码,找到需要抓取的部位
*
  将前后标记一起复制到代码中,然后用 (.*?) 替代我们需要抓到的内容即可
*
  匹配方案必须要能够和页面内容唯一匹配

2 >   实例化正则表达式,需要指定两个选项
NSRegularExpressionCaseInsensitive      
忽略大小写
NSRegularExpressionDotMatchesLineSeparators
  . 能够匹配换行

3 ]] ]]> 
*
  使用 firstMatchInString 查找第一个与匹配方案相同的内容
*
  使用 matchesInString 可以查找多个与匹配方案相同的内容,

通常用在
html 里面标示无符号的序列
html 里面标示数字的序列

4 >   根据 result rangeAtIndex 方法,获取到要抓取的内容
第一个括号对应的索引是 1 ,第二个是 2 ,依次类推

5 >   根据 range ,使用字符串的 substringWithRange 方法,可以获得准确的内容

在正则表达式中,需要做出错处理,因为如果方案书写不正确, regex 是不能被实例化的

===================================================================

网络访问中的方法:

1 ]] ]]> GET
// 1.   定义 URL ,确定要访问的地址
NSURL *url = [NSURL URLWithString:urlString];
// 2.   定义 URLRequest ,确定网络访问请求,在 GET 方法中直接用 URL 即可
NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:
2.0f ];

===================================================
NSURLResponse *response =
  nil ;
NSError *error =
  nil ;
//   同步请求的应用场景:例如:网银账户的登录!
//   一定要获取到某个网络返回数据后,才能进行下一步操作的场景!
//   发送同步请求, respone&error 要带地址的原因就是为了方法执行后,能够方便使用 response&error
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
===================================================

//   异步方法
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
//   块代码的内容会在网络访问后执行
//   块代码是预先定义好的代码片段,在满足某个条件时执行的。
     NSLog(
@"%@" , [NSThread currentThread]);
}];
===================================================

2 ]] ]]> POST
// 1.   定义 URL ,确定要访问的地址
NSURL *url = [NSURL URLWithString:urlString];
// 2.   定义请求,生成数据体添加到请求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
// 1)   指定网络请求的方法
request.HTTPMethod =
  @"POST" ;

// 2)   生成数据体
// *   先生成字符串
NSString *bodyStr = [NSString stringWithFormat:
@"username=%@&password=%@" , userName, password];
// *   将字符串转换成 NSData
request.HTTPBody = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];

//   提示: POST 请求多用于用户登录,或者上传文件,在实际开发中, “POST 请求的参数及地址 需要与公司的后端程序员沟通。
// POST 同样具备同步和异步方法

===================================================================
* AFNetworking      AFN
第三方网络框架

//  应用场景,针对 " " 的文件下载以及文件上传
//  目前还有非常多公司在使用此框架!


AFN
使用步骤

1.   定义成员变量,记录 AFN 的客户端,使用 BaseURL 初始化
该客户端会同时实例化一个操作队列,以便于后续的多线程处理

     AFHTTPClient *_httpClient;

2.   定义 AFHTTPRequestOperation ,并且定义其中的操作即可
     AFHTTPRequestOperation
是对 NSURLConnection 的封装

提供有三个块代码:
1 >   完成操作的块代码

- (
void )setCompletionBlockWithSuccess:( void   (^)(AFHTTPRequestOperation *operation,   id responseObject))success
failure:(
void   (^)(AFHTTPRequestOperation *operation, NSError *error))failure;

2 >   下载进度的块代码
- (
void )setDownloadProgressBlock:( void   (^)(NSUInteger bytesRead,   long   long   totalBytesRead,   long   long totalBytesExpectedToRead))block;

3 >   上传进度块代码
- (
void )setUploadProgressBlock:( void   (^)(NSUInteger bytesWritten,   long   long   totalBytesWritten,   long   long totalBytesExpectedToWrite))block;


基本使用的核心代码
// 1.   实例化 AFHTTPClient
NSURL *url = [NSURL URLWithString:
@"http://192.168.3.251/~apple/itcast" ];
_httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];

// 2.   定义网络请求操作
// 1> NSURLRequest
NSURLRequest *request = [_httpClient requestWithMethod:
@"GET"   path: @"download/Objective-C2.0.zip"   parameters: nil ];

// 2> AFHTTPRequestOperation => NSURLConnection
AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];

// 3>   设置完成块代码,相比较 OC 的区别就在这里
setCompletionBlockWithSuccess
å
// 4>   启动操作
[_httpClient.operationQueue addOperation:op];
*/

在网络应用开发中,真正涉及到网络操作的代码,非常少!最主要的把
     GET
方法
同步、异步
反序列化 JSON
OK

转载于:https://www.cnblogs.com/ChenYilong/p/3556241.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值