网络篇----http协议
常用的http协议有post和get方式
简介来说post方式访问的话,在访问的时候地址栏的链接中不显示所登陆的用户名和密码,
http://127.0.0.1:8080/MJServer/login 来保证安全,它是将数据存储到请求体里面
#import "HMViewController.h" #import "MBProgressHUD+MJ.h" @interface HMViewController () @property (weak, nonatomic) IBOutlet UITextField *username; @property (weak, nonatomic) IBOutlet UITextField *pwd; - (IBAction)login; @end @implementation HMViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.view endEditing:YES]; } - (IBAction)login { // 1.用户名 NSString *usernameText = self.username.text; if (usernameText.length == 0) { [MBProgressHUD showError:@"请输入用户名"]; return; } // 2.密码 NSString *pwdText = self.pwd.text; if (pwdText.length == 0) { [MBProgressHUD showError:@"请输入密码"]; return; } // 增加蒙板 [MBProgressHUD showMessage:@"正在拼命登录中...."]; // 3.发送用户名和密码给服务器(走HTTP协议) // 创建一个URL : 请求路径 NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/login"]; // 创建一个请求 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 5秒后算请求超时(默认60s超时) request.timeoutInterval = 15; request.HTTPMethod = @"POST"; // 设置请求体 NSString *param = [NSString stringWithFormat:@"username=%@&pwd=%@", usernameText, pwdText]; // NSString --> NSData request.HTTPBody = [param dataUsingEncoding:NSUTF8StringEncoding]; // 设置请求头信息 [request setValue:@"iPhone 6" forHTTPHeaderField:@"User-Agent"]; // 发送一个同步请求(在主线程发送请求) // queue :存放completionHandler这个任务 NSOperationQueue *queue = [NSOperationQueue mainQueue]; [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler: ^(NSURLResponse *response, NSData *data, NSError *connectionError) { // 隐藏蒙板 [MBProgressHUD hideHUD]; // NSHTTPURLResponse *resp = (NSHTTPURLResponse *)response; // NSString *msg = [NSHTTPURLResponse localizedStringForStatusCode:resp.statusCode]; // NSLog(@"%d %@ %@", resp.statusCode, msg, resp.allHeaderFields); // 这个block会在请求完毕的时候自动调用 if (connectionError || data == nil) { // 一般请求超时就会来到这 [MBProgressHUD showError:@"请求失败"]; return; } // 解析服务器返回的JSON数据 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; NSString *error = dict[@"error"]; if (error) { // {"error":"用户名不存在"} // {"error":"密码不正确"} [MBProgressHUD showError:error]; } else { // {"success":"登录成功"} NSString *success = dict[@"success"]; [MBProgressHUD showSuccess:success]; } }]; } @end
get方法 常用于查询使用,这个方式访问登陆的时候会显示登录用户名和密码不安全,
127.0.0.1:8080/MJServer/login?username=123&pwd=123
#import "ViewController.h" #import "MBProgressHUD+MJ.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UITextField *user; @property (weak, nonatomic) IBOutlet UITextField *pwd; - (IBAction)loginBtn:(id)sender; @end @implementation ViewController //退出键盘 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.view endEditing:YES]; } - (void)viewDidLoad { [super viewDidLoad]; } - (IBAction)loginBtn:(id)sender { NSString *usertext=self.user.text; if(usertext.length==0){ [MBProgressHUD showError:@"输入账号"]; return; } NSString *pwdtext=self.pwd.text; if(pwdtext.length==0){ [MBProgressHUD showError:@"请输入密码"]; return; } // NSLog(@"%@",pwdtext); // // //发送用户名和密码给服务器 NSString *sting=[NSString stringWithFormat:@"http://127.0.0.1:8080/MJServer/login?username=%@&pwd=%@",usertext,pwdtext]; NSURL *url=[NSURL URLWithString:sting]; NSURLRequest *request=[NSURLRequest requestWithURL:url]; //发送一个同步请求 // NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; // NSLog(@"%@",data); //返回到主线程 NSOperationQueue *queue=[NSOperationQueue mainQueue]; //发送一个同步请求 [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { NSLog(@"%@", [NSThread currentThread]); if(connectionError ||data ==nil){ [MBProgressHUD showError:@"请求失败"]; return; } // 解析返回的json数据 //SONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil json数据转换为oc对象 NSDictionary *tionary=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; NSString *error=tionary[@"error"]; if(error){ [MBProgressHUD showError:error]; }else{ NSString *secces=tionary[@"secces"]; [MBProgressHUD showSuccess:secces]; } }]; } @end
http的通信过程
1.请求
1>请求行:请求方法、请求路径、http协议版本
GET/POSt /MJServer/resource/image/ http/1.1
2>请求头:客户端的一些描述信息
*user-Agent:客户端的环境(软件环境)即是描述自己的设备是什么系统
3>请求体:POSt请求才会有这个东西
*请求参数,发给服务器的数据
2.响应
1>状态行(响应行):http协议版本、响应状态码、响应状态描述
http/1.1 200 ok
2>响应头:服务器的一些描述信息
*content-type:服务器返回给客户端的内容长度
*content-length:服务器返回给客户端的内容长度(比如文件的大小)
3>实体内容(响应体)
*服务器返回给客户端具体的数据,比如文件数据