一、网络请求
在网络开发中,需要了解一些常用的请求方法:
- GET请求:get是获取数据的意思,数据以明文在URL中传递,受限于URL长度,所以传输数据量比较小。
- POST请求:post是向服务器提交数据的意思,提交的数据以实际内容形式存放到消息头中进行传递,无法在浏览器url中查看到,大小没有限制。
- HEAD请求:请求头信息,并不返回请求数据体,而只返回请求头信息,常用用于在文件下载中取得文件大小、类型等信息。
二、NSURLConnection
NSURLConnection是苹果提供的原生网络访问类,但是苹果很快会将其废弃,且由NSURLSession(iOS7以后)来替代。目前使用最广泛的第三方网络框架AFNetworking最新版本已弃用了NSURLConnection,那我们学习它还有什么用呢?
* 首先,苹果弃用它还是需要时间的,最起码到iOS10之后。
* 现在还有一些老项目会使用NSURLConnection,特别是2013年之前的项目,用户量基础还是很大的;
* 另外,不得不承认,有些公司还在用类似ASI这些经典的网络框架,所以还是很有必要学习NSURLConnection的。
让我们来首先了解几个类:
1. NSURL:请求地址,定义一个网络资源路径
NSURL *url = [NSURL URLWithString:@"协议://主机地址/路径?参数&参数"];
解释如下:
- 协议:不同的协议,代表着不同的资源查找方式、资源传输方式,比如常用的
http
,ftp
等 - 主机地址:存放资源的主机的IP地址(域名)
- 路径:资源在主机中的具体位置
- 参数:参数可有可无,也可以多个。如果带参数的话,用“?”号后面接参数,多个参数的话之间用&隔开
2.NSURLRequest:请求,根据前面的NSURL建立一个请求
NSURLRequest *request = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:15.0];
参数解释如下:
url
:资源路径cachePolicy
:缓存策略(无论使用哪种缓存策略,都会在本地缓存数据),类型为枚举类型,取值如下:
NSURLRequestUseProtocolCachePolicy = 0 //默认的缓存策略,使用协议的缓存策略
NSURLRequestReloadIgnoringLocalCacheData = 1 //每次都从网络加载
NSURLRequestReturnCacheDataElseLoad = 2 //返回缓存否则加载,很少使用
NSURLRequestReturnCacheDataDontLoad = 3 //只返回缓存,没有也不加载,很少使用
timeoutInterval
:超时时长,默认60s
另外,还可以设置其它一些信息,比如请求头,请求体等等,如下:
NSMutableURLRequest *request =
[NSMutableURLRequest requestWithURL:url
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:15.0];
// 告诉服务器数据为json类型
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
// 设置请求体body(json类型的数据)
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:@{@"userid":@"123456"}
options:NSJSONWritingPrettyPrinted
error:nil];
request.HTTPBody = jsonData;
注意,上面的request是
NSMutableURLRequest
,即可变类型
3.NSURLResponse:请求结果响应,连接成功后服务器会返回的响应
- 该类不用我们创建