http://wenku.baidu.com/view/b99a07d8ce2f0066f533229d.html
前言:理论上讲iPhone可以访问任何协议的端口,我们这里只讲述基于URL的网络编程。
一、支持的协议
文件传输协议(ftp://)、超文本传输协议(http://)、超文本传输协议(https://)、本地文件路径(file:///)。
二、访问url内容的步骤
1、构造NSURL
2、生成一个NSURLRequest
3、通过NSURLConnection发送请求
4、通过返回的NSURLResponse和NSError分析结果
下面,将详细介绍每一步:
1、NSURL
2、NSURLRequest
2.1 封装了一个针对某个URL的请求信息
构造方法:
+ (id)requestWithURL:(NSURL *)URL; + (id)requestWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval; - (id)initWithURL:(NSURL *)URL; - (id)initWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval;
2.2 可以指明内容的缓存策略
enum { NSURLRequestUseProtocolCachePolicy = 0, NSURLRequestReloadIgnoringLocalCacheData = 1, NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData, NSURLRequestReturnCacheDataElseLoad = 2, NSURLRequestReturnCacheDataDontLoad = 3, NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented }; typedef NSUInteger NSURLRequestCachePolicy;
2.3 如果需要在初始化后仍能对url请求进行修改,可使用NSMutableURLRequest,可以修改的项目包括:缓存策略、超时时间、URL对象、主文档地址、头信息、上行内容、请求方法、Cookie
3、NSURLConnection
可以使用同步或异步的方式发送一个请求,两者的结果返回内容不同。
3.1 同步请求
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;
是最快捷的方式,但是不能监控内容下载过程。
返回数据的处理:返回数据封装以NSData,一般将其转换为NSString后,才进行处理。
响应的处理:NSURLRequest对应的响应的元信息封装在NSURLResponse中。
NSURLResponse:它包含关于一个URL load的元数据。注意:NSURLResponse对象并不包含实际的url内容。如果想获得一个URL load接收到的数据的更详细的信息,请看NSURLConnection and NSURLConnectionDelegate。
- (id)initWithURL:(NSURL *)URL MIMEType:(NSString *)MIMEType expectedContentLength:(NSInteger)length textEncodingName:(NSString *)name; - (NSURL *)URL;//返回receiver的url - (NSString *)MIMEType;//返回receiver的MIMEType - (long long)expectedContentLength; - (NSString *)textEncodingName; - (NSString *)textEncodingName;
错误的处理:如果请求过程中发生错误,导致请求无法完成,则error对象不为nil。
NSError:包含许多方法可以描述错误信息,常用的有- (NSString *)localizedDescription;
3.2 异步请求
不影响当前正在进行的操作,数据分多次按顺序返回
异步请求步骤:
1、构造NSURL
2、生成一个NSURLRequest
3、构造连接对象(NSURLConnection)
4、发送请求
5、使用委托监控数据返回过程
6、将多次返回的数据连接成同一个数据对象
7、使用连接后的数据对象
构造连接:
- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately NS_AVAILABLE(10_5, 2_0); - (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate; + (NSURLConnection*)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate;
发送请求:
- (void)start NS_AVAILABLE(10_5, 2_0); - (void)cancel;
使用委托:
NSURLConnectionDelegate、NSURLConnectionDataDelegate、NSURLConnectionDownloadDelegate
[提醒自己:好好看一下NSURLConnection这个类!]
三、总结
•可以使用NSURL构造一个URL
•可以使用NSURLRequest构造一个请求
•可以使用NSURLConnection发送一个请求,并返回数据
•可以使用NSURLResponse和NSError来监测响应和错误信息