在iOS开发中,少不了与网络打交道,在使用原生网络请求开发过程时,总是会使用到如下三个对象NSURL,
NSURLRequest,NSURLConnection。
访问URL步骤
1、构造NSURL,,使用NSURL构造一个URL
2、生成一个NSURLRequest,使用NSURLRequest构造一个请求
3、通过NSURLConnection发送请求,使用NSURLConnection发送一个请求,并返回数
4、通过返回的NSURLResponse和NSError分析结果 ,使用NSURLResponse和NSError来监测响应和错误信息
1、NSURL
NSURL是网络请求时需要用到的网络地址。
如何构造一个url,既有+方法,也有-方法
1-1、+方法
+ (id)URLWithString:(NSString *)URLString
+ (id)URLWithString:(NSString *)URLString relativeToURL: (NSURL *)baseURL
+ (id)fileURLWithPath:(NSString *)path isDirectory: (BOOL)isDir
+ (id)fileURLWithPath:(NSString *)path
1-2、-方法
- (id)initWithScheme:(NSString *)scheme host:(NSString *)host path:(NSString *)path
- (id)initWithString:(NSString *)URLString
- (id)initWithString:(NSString *)URLString relativeToURL:(NSURL *)baseURL
- (id)initFileURLWithPath:(NSString *)path isDirectory:(BOOL)isDir
- (id)initFileURLWithPath:(NSString *)path
如:NSURL *urlHao123 = [NSURL URLWithString:@"http://www.hao123.com"];
2、NSURLRequest
封装了一个针对某个URL的请求信息,可以指明内容的缓存策略构造URL请求。包括不可变请求NSURLRequest,或
可变请求NSMutableURLRequest。
2-1、不可变的请求NSURLRequest
2-1-1、+方法
+ (id)requestWithURL:(NSURL *)theURL
+ (id)requestWithURL:(NSURL *)theURL cachePolicy: (NSURLRequestCachePolicy)cachePolicy timeoutInterval:
(NSTimeInter val)timeoutInterval
2-1-2、-方法
- (id)initWithURL:(NSURL *)theURL
- (id)initWithURL:(NSURL *)theURL cachePolicy: (NSURLRequestCachePolicy)cachePolicy timeoutInterval:
(NSTimeInter val)timeoutInterval
2-2、可修改的URL请求NSMutableURLRequest
如果需要在初始化后仍能对URL请求对象进行修改,可以使用NSMutableURLRequest,可以修改的项目包括:
缓存策略
超时时间
URL对象
主文档地址
头信息
上行内容
请求方法
Cookie
2-3、支持的缓存策略
NSURLRequestUseProtocolCachePolicy
NSURLRequestReloadIgnoringLocalCacheData
NSURLRequestReloadIgnoringLocalAndRemoteCacheData
NSURLRequestReloadIgnoringCacheData
NSURLRequestReturnCacheDataElseLoad
NSURLRequestReturnCacheDataDontLoad
NSURLRequestReloadRevalidatingCacheData
3、NSURLConnection
发送请求:可以使用同步或异步的方式发送一个请求,两者的结果 返回内容不同
3-1、同步请求
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse
**)response error:(NSError **)error
最快捷的方式,但是不能监控内容下载过程
3-2、异步请求
不影响当前正在进行操作 ,且请求回来的数据分多次按顺序返回
3-2-1、代码块异步请求
+ (void)sendAsynchronousRequest:(NSURLRequest*) request
queue:(NSOperationQueue*) queue
completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError));
3-2-2、代理方法异步请求
异步请求步骤:
3-2-2-1、构造连接对象(NSURLConnection)
+ (NSURLConnection *)connectionWithRequest: (NSURLRequest *)request delegate:(id)delegate
- (id)initWithRequest:(NSURLRequest *)request delegate: (id)delegate
- (id)initWithRequest:(NSURLRequest *)request delegate: (id)delegate startImmediately:(BOOL)startImmediately
3-2-2-2、发送请求
- (void)start
- (void)cancel
3-2-2-3、使用委托监控数据返回过程
3-2-2-3-1、请求开始
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
3-2-2-3-2、请求接收数据
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
3-2-2-3-3、请求完成
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
3-2-2-3-4、请求失败
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
3-2-2-4、将多次返回的数据连接成同一个数据对象
3-2-2-5、使用连接后的数据对象
4、数据信息处理
4-1、返回数据的处理
返回数据封装以NSData
一般将其转换为NSString后,才进行处理
NSString类中常用的转换方法:
- (id)initWithData:(NSData *)data encoding: (NSStringEncoding)encoding
4-2、响应信息的处理
4-2-1、NSURLResponse
NSURLRequest对应的响应的元信息封装在NSURLResponse中
- (long long)expectedContentLength
- (NSString *)suggestedFilename
- (NSString *)MIMEType
- (NSString *)textEncodingName
- (NSURL *)URL
4-3、错误信息的处理
NSError错误的处理
如果请求过程中发生错误,导致请求无法完成,则 error对象不为nil
- (NSString *)localizedDescription
5、支持协议:
5-1、文件传输协议(ftp://)
5-2、超文本传输协议(http://)
5-3、安全128-bit超文本传输协议(https://)
5-4、本地文件路径(file:///)