iOS原生网络请求使用总结

在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:///)


转载于:https://my.oschina.net/potato512/blog/647735

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值