HTTP协议
1.HTTP协议的全称:超文本传输协议
2.通信过程
1> 请求
- 客户端 --> 服务器
- 请求的内容
a. 请求行(请求方法\请求资源路径\HTTP协议)
b. 请求头(描述客户端的信息)
c. 请求体(POST请求才需要有, 存放具体数据)
2> 响应
- 服务器 --> 客户端
- 响应的内容
a. 状态行(HTTP协议版本\状态码\状态信息)
b. 响应头(服务器信息\返回数据的类型\返回数据的长度)
c. 实体内容(响应体, 返回给客户端的具体内容)
3.HTTP请求的方法
1> GET * 参数都拼接在URL后面 * 参数有限制
- 请求代码
//1设置请求路径
NSString *urlStr = [NSString stringWithFormat:@"http://192.168.1.200:8080/MJServer/login?username=%@&pwd=%@", username, pwd];
//2转码,URL里面不能包含中文
urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//3创建URL
NSURL *url = [NSURL URLWithString:urlStr];
//4创建请求对象
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 默认就是GET请求
request.timeoutInterval = 5; // 设置请求超时
//5发送请求
NSOperationQueue *queue = [NSOperationQueue mainQueue];//此队列是用block中代码执行的队列
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {...}];
2> POST
- 参数都在请求体
- 参数没有限制
- 文件上传只能用POST
- 请求代码
// 1.设置请求路径
NSURL *url = [NSURL URLWithString:@"http://192.168.1.200:8080/MJServer/login"];
// 2.创建请求对象
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 默认就是GET请求
request.timeoutInterval = 5; // 设置请求超时
request.HTTPMethod = @"POST"; // 设置为POST请求
// 通过请求头告诉服务器客户端的类型
[request setValue:@"ios" forHTTPHeaderField:@"User-Agent"];
//3.设置请求体
NSString *param = [NSString stringWithFormat:@"username=%@&pwd=%@", username, pwd];
request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding];
// 4.发送请求
NSOperationQueue *queue = [NSOperationQueue mainQueue];//此队列是用block中代码执行的队列
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {...}];
3>HEAD :获得响应头信息,不获取响应体
4.iOS中发送GET\POST请求的手段
1>ASI
基于CFNEtwork
提供了非常强大的功能,使用简单
现在作者已停止更新
2>AFN
基于NSURLConnection
提供了常用的功能,使用简单
3>建议
为了提高开发效率和减少调试花费的时间,尽量使用著名的简单的第三方框架,因此,处理HTTP请求,更建议使用ASI,AFN