iOS网络请求

支持协议:   
• 文件传输协议(ftp://)
•  超文本传输协议(http://)
•  安全128-bit超文本传输协议(https://)
•  本地文件路径(file:///)
访问URL步骤:
• 构造NSURL,,使用NSURL构造一个URL
•  生成一个NSURLRequest,使用NSURLRequest构造一个请求
• 通过NSURLConnection发送请求,使用NSURLConnection发送一个请求,并返回数
•  通过返回的NSURLResponse和NSError分析结果 ,使用NSURLResponse和NSError来监测响应和错误信息
 
1. NSURL

一个典型的URL如下:
http://lily:[email protected]/search?hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10#page

URL组成1:
absoluteString:  http://lily:[email protected] ... =f&oq=&aqi=g10#page 
absoluteURL:  http://lily:[email protected] ... =f&oq=&aqi=g10#page
baseURL - 如果在构造URL对象时没有指定,则为nil
fragment: page
host:  www.google.com
URL组成2:
port: 80,如果没有指定,则为nil
path: /search
query: hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10
relativePath: /search
relativeString:  http://lily:[email protected]:80/search? hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10#page
URL组成3:
user: lily
password: 123456 
scheme: http
如何构造一个url
• + (id)URLWithString:(NSString *)URLString
• + (id)URLWithString:(NSString *)URLString relativeToURL: (NSURL *)baseURL
• + (id)fileURLWithPath:(NSString *)path isDirectory: (BOOL)isDir
• + (id)fileURLWithPath:(NSString *)path
----------------------------------------------------------
• - (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
 
2. NSURLRequest:
 
封装了一个针对某个URL的请求信息,可以指明内容的缓存策略构造URL请求:
• + (id)requestWithURL:(NSURL *)theURL
• + (id)requestWithURL:(NSURL *)theURL cachePolicy: (NSURLRequestCachePolicy)cachePolicy timeoutInterval: (NSTimeInter val)timeoutInterval
• - (id)initWithURL:(NSURL *)theURL
• - (id)initWithURL:(NSURL *)theURL cachePolicy: (NSURLRequestCachePolicy)cachePolicy timeoutInterval: (NSTimeInter val)timeoutInterval
支持的缓存策略:
NSURLRequestUseProtocolCachePolicy 
NSURLRequestReloadIgnoringLocalCacheData 
NSURLRequestReloadIgnoringLocalAndRemoteCacheData 
NSURLRequestReloadIgnoringCacheData 
NSURLRequestReturnCacheDataElseLoad 
NSURLRequestReturnCacheDataDontLoad 
NSURLRequestReloadRevalidatingCacheData
 
可修改的URL请求
• 如果需要在初始化后仍能对URL请求对象进行修改,可以使用NSMutableURLRequest,可以修改的项目包括:
• 缓存策略
• 超时时间
• URL对象
• 主文档地址
• 头信息
• 上行内容 
• 请求方法
• Cookie
 
发送请求:
可以使用同步或异步的方式发送一个请求,两者的结果 返回内容不同
3. NSURLConnection
 
同步请求:
• + (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error
• 最快捷的方式
• 不能监控内容下载过程
 
返回数据的处理
• 返回数据封装以NSData
• 一般将其转换为NSString后,才进行处理 
• NSString类中常用的转换方法:
• - (id)initWithData:(NSData *)data encoding: (NSStringEncoding)encoding
 
1) NSURLResponse
 
响应的处理:
• NSURLRequest对应的响应的元信息封装在NSURLResponse中 
• - (long long)expectedContentLength 
• - (NSString *)suggestedFilename
• - (NSString *)MIMEType
• - (NSString *)textEncodingName 
• - (NSURL *)URL
 
2) NSError
 
错误的处理
• 如果请求过程中发生错误,导致请求无法完成,则 error对象不为nil
• - (NSString *)localizedDescription
异步请求
• 不影响当前正在进行操作 
• 数据分多次按顺序返回
异步请求步骤:
• 构造连接对象(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
发送请求
• - (void)start
• - (void)cancel
 
使用委托
• - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
• - (void)connectionDidFinishLoading:(NSURLConnection *)connection
• - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

 
UIWebView
• 内置的浏览器
• 可以显示HTML/XHTML内容,以及执行Javascript脚本 • 可以控制浏览器的内容和访问的URL
• 可以执行前进/后退/刷新等动作
• 可以通过委托监测URL的下载过程
UIWebView常用API
• - (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL
• - (void)loadRequest:(NSURLRequest *)request
• - (void)reload
• BOOL detectsPhoneNumbers
• BOOL scalesPageToFit

你可能感兴趣的:(iOS网络请求)