NSURLConnection
- 常用类
- NSURL:请求地址
- NSURLRequest:一个NSURLRequest对象就代表一个请求,包含的信息有
- 一个NSURL对象
- 请求方法(默认是GET)、请求头、请求体
- 请求超时
- ...
- NSMutableURLRequest:NSURLRequest的子类 (比如使用POST请求)
- NSURLConnection
- 负责发送请求,建立客户端和服务器的连接
- 发送数据给服务器,收集来自服务器的数据
- 使用步骤
- 1.创建一个NSURL对象,设置请求路径
- 2.传入NSURL创建一个NSURLRequest对象,设置请求头和请求体
- 3.使用NSURLConnection发送请求
- GET请求
- 01.确定请求路径NSURL
- URLWithString:
- 02.创建请求对象NSURLRequest
- 该请求对象内部默认会提供请求头和(请求体) |请求方法默认是GET
- requestWithURL:
- alloc initWithURL:
- 03.使用NSRULConnection发送GET请求
- 返回值就是响应体信息
-
同步请求
,开发中用的不多,网速比较慢的时候会卡住主线程sendSynchronousRequest:...- 参数一:请求对象
- 参数二:响应头信息(传地址)
- 初始化一个响应头信息
- 参数三:错误信息(传地址)
- 初始化一个错误信息
-
异步请求
不会卡住主线程sendAsynchronousRequest:...- 参数一:请求对象
- 参数二:队列,决定block块在哪个线程中调用
- 参数三:completionHandler完成(成功|失败)之后的回调,response:响应头信息,包含状态码、响应时间、请求路径等信息;data:响应体信息;connectionError:错误信息
- 怎么拿到状态码?
- NSHTTPURLResponse是真实类型和NSURLResponse是继承关系
- 强转NSHTTPURLResponse * res = (NSHTTPURLResponse*)response
- res.statusCode
- res.allHeaderFields所有响应头信息
- 04.解析服务器返回的数据
- 看上去好像是字典,本质上字符串
- 把二进制数据转为字符串
- allocinitWithData:encoding:UTF8
- 05.修改配置文件:ATS
- 01.确定请求路径NSURL
-
通过代理发送异步请求
- 01.确定请求路径NSURL
- URLWithString:
- 02.创建请求对象NSURLRequest
- 该请求对象内部默认会提供请求头和(请求体) |请求方法默认是GET
- requestWithURL:
- alloc initWithURL:
- 03.设置代理
- 方法一:NSURLConnection alloc initWithRequest:delegate:
- 方法二:NSURLConnection allocinitWithRequest:delegate:startImmdiately:YES
- 如果设置startImmdiately为NO,怎么发送网络请求?调用start方法发送网络请求
- 怎么拿到服务器返回数据?
- 怎么取消请求? cancel
- 04.遵守代理协议<NSURLConnectionDataDelegate>
- 05.实现代理方法
- 接收到服务器响应的时候调用connection:didReceiveResponse:
- 初始化可变的数据
- 接收到服务器返回的数据的时候调用connection:didReceiveData:
- 该方法可能会调用多次
- 拼接服务器返回的数据
- 失败的时候会调用connection:didFailWithError:
- 请求完成的时候调用该方法connectionDidFinishLoading:
- 解析数据
- 接收到服务器响应的时候调用connection:didReceiveResponse:
- 代理使用场景:下载大文件的时候
- 设置代理好处:监听文件下载进度
- 01.确定请求路径NSURL
-
POST
- 发送一个异步请求
- 01.确定请求路径URLWithString:
- 02.创建可变请求对象NSMutableURLRequest
- requestWithURL:
- 默认请求头|请求方法(GET)
- 2.1修改请求方法为POST.HTTPMethod = @"POST"
- 2.2设置参数,设置请求体
- username |pwd |type
- .HTTPBody = 把字符串转成二进制数据:[@"username = 1 &pwd = 1 & type = JSON" dataUsingEncoding];
- 2.3设置其他属性
- 请求超时时间.timeoutInterval:如果在该时间段内没有完成请求那么就认为请求失败,开发中一般是15s或30s
- 设置请求头信息setValue:forHTTPHeaderField:应用场景:如果公司想要收集用户的信息,可以通过客户端的环境来收集User-Agent
- 设置请求头多条信息addValue:forHTTPHeaderField:
- 03.发送异步请求
- 04.解析服务器返回的数据
-
GET请求和POST请求的区别?
- GET请求的步骤
- 确定请求路径(包含参数)
- 创建请求对象
- 使用NSURLConnection发送请求
- POST请求
- 确定请求路径(不包含参数)
- 创建可变的请求对象
- 修改请求方法为POST
- 设置请求体(设置参数)
- 使用NSURLConnection发送请求
- 请求路径的区别
- GET:协议头://主机地址/接口名称?参数1&参数2&参数3
- POST:协议头://主机地址/接口名称
- GET请求的步骤
- 中文转码处理
- 确定请求路径(包含参数)
- username = 李 &pwd =li &type = JSON
- 浏览器内部在发送网络请求的时候会做中文转码处理
- [urlStr stringByAddingpERCENTeSCAPESusingEncoding:NSUTF8StringEncoding]
- URLWithString:
- 创建请求对象
- 使用NSURLConnection发送请求
- 解析数据
- 确定请求路径(包含参数)