网络篇----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>实体内容(响应体)

*服务器返回给客户端具体的数据,比如文件数据

 

posted @ 2015-08-12 10:41  Lee_M  阅读(194)  评论(0编辑  收藏  举报