IOS学习 网络HTTP Get和Post请求与登录界面加密 涉及按钮边框圆角与颜色设置

#import "ViewController.h"

#import "NSString+Hash.h"

#define kusernameKey @"usernameKey"

#define kpasswordKey @"passwordKey"

@interface ViewController ()

@property(nonatomic,retain)UITextField *nameFd;

@property(nonatomic,retain)UITextField *pwdFd;

@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    [self login];

}


-(void)login{

    _nameFd = [[UITextField alloc]initWithFrame:CGRectMake(20, 60,self.view.bounds.size.width - 40, 40)];

    _nameFd.placeholder = @"请输入用户名";

    _nameFd.borderStyle = UITextBorderStyleRoundedRect;

    [self.view addSubview:_nameFd];

    

    _pwdFd = [[UITextField alloc]initWithFrame:CGRectMake(20, 140, self.view.bounds.size.width - 40, 40)];

    _pwdFd.placeholder = @"请输入登入密码";

    _pwdFd.borderStyle = UITextBorderStyleRoundedRect;

    //是否安全输入,如果是的,输入内容将为

    _pwdFd.secureTextEntry = YES;

    [self.view addSubview:_pwdFd];

    

    UIButton *loginBtn = [[UIButton alloc]initWithFrame:CGRectMake(20, 220, self.view.bounds.size.width-40, 40)];

    [loginBtn setTitle:@"登入" forState:UIControlStateNormal];

    loginBtn.backgroundColor = [UIColor purpleColor];

    loginBtn.layer.cornerRadius = 8; //按钮圆角

    //按钮的边框颜色设置:必须加CGColor

    loginBtn.layer.borderWidth = 4;

    loginBtn.layer.borderColor = [UIColor greenColor].CGColor;

    

    [loginBtn addTarget:self action:@selector(loginAction) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:loginBtn];

    

    

    [self loadUserInfo];

}


// 从偏好设置中取出账号和密码

- (void)loadUserInfo

{

    NSString *username = [[NSUserDefaults standardUserDefaults] objectForKey:kusernameKey];

    NSString *passeord = [[NSUserDefaults standardUserDefaults] objectForKey:kpasswordKey];

    

    if (username.length && passeord.length) { // 如果有值,直接取出来!

        self.nameFd.text = username;

        self.pwdFd.text = passeord;

    }

}


//点击按钮:登入事件

-(void)loginAction{

    // 客户端跟服务器交互: 如果不写这一句: 用户可以随意访问服务器的这个接口!

    // 有些业务逻辑! 是交给服务器处理还是在客户端处理?

    // 复杂的业务逻辑,尽量交给服务器来处理;如果涉及到数据(同步),也交给服务器处理!

    // 客户端处理: 判断电话号码是否合法/判断用户是否输入信息等等... 前段处理可以较少服务器的压力!

    if (!self.nameFd.text.length && !self.pwdFd.text.length) {

        

        NSLog(@"请输入账号和密码");

        

    }else

    {

        // 1.创建请求 (POST请求)

        

        NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/httpLogin/login.php"];

        

        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

        

        // 设置请求方法:

        request.HTTPMethod = @"POST";

        

        // 对密码进行加密之后,再发送!

        NSString *password = [self.pwdFd.text md5String];

        

        NSString *bodyStr = [NSString stringWithFormat:@"username=%@&password=%@",self.nameFd.text,password];

        

        // 设置请求体:

        request.HTTPBody =[bodyStr dataUsingEncoding:NSUTF8StringEncoding];

        

        // 2. 发送请求

        [[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

            

            if (data) {

                

//                 NSLog(@"data:%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);

                

                // 解析 JSON 数据

                NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];

                NSLog(@"%@",dict[@"userId"]);

                if (dict[@"userId"]) { // 如果服务器返回了 userId 说明账号密码正确,登陆成功!

                    

                    NSLog(@"登陆成功!");

                    

                    // 如果登陆成功,用户再次进入程序的时候,就不需要再次输入账号和密码了!需要在本地存储一下账号和密码!

                    [self saveUserInfo];

                    

                }else

                {

                    NSLog(@"账号或者密码错误");

                }

            }else

            {

                NSLog(@"连接错误,请重新尝试连接服务器");

            }

        }] resume];

    }

}


// 将密码保存在偏好设置中

- (void)saveUserInfo

{

    // 不能直接以密码明文的形式保存密码,需要加密之后再保存

    // 将密码进行 MD5 加密

    NSString *password = [self.pwdFd.text md5String];


    // 单例.

//    NSUserDefaults *users = [NSUserDefaults standardUserDefaults];

    [[NSUserDefaults standardUserDefaults] setObject:self.nameFd.text forKey:kusernameKey];

    [[NSUserDefaults standardUserDefaults] setObject:password forKey:kpasswordKey];

    [[NSUserDefaults standardUserDefaults] synchronize];

}


-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

//    [self demo2];

}


//Get请求方法:带参数的网络请求!(如果需要上传参数给服务器)

-(void)demo1{

    /*

     1.参数格式: key=value (key:服务器接受参数的key,在实际开发中,后端人员/接口文档中会告诉你. value:就是需要告诉服务器的具体参数内容)

     2.一般情况下,服务器需要我们提供多个参数! 参数和参数之间以 & 分隔 username=zhangsan&password=zhang

    

     1.第一种告诉服务器参数的方法: 将参数拼接在 url ! 注意: ? 后面拼接参数! 一个 url , ? 后面的内容都是参数!

    

     GET :http请求方法,从服务器获取数据! 如果使用 get 请求发送参数给服务器,需要将参数拼接在 url !

     缺点: 所有的参数都在 url . 信息不安全!  */

    

    NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/httpLogin/login.html?username=zhangsan&password=zhang"];

    

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    

    // 2. 发送请求

    [[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        // 处理服务器返回的数据!

        

        NSLog(@"data:%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);

        

        

    }] resume];

}


//POST 请求

-(void)demo2{

    

    // 1. 创建请求:由于 POST 请求需要手动指定 http 的请求方法为 POST ,所以只能用 可变请求!

    

    // 接口

    NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/httpLogin/login.php"];

    

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

    

    // 设置请求方法为 POST ; 默认情况下,所有的请求都是 GET 请求.

    request.HTTPMethod = @"POST";

    

    // POST 请求的参数,都是放在请求体中的! 注意:请求体式二进制数据!

    

    // 设置请求体内容:

    NSString *str = [NSString stringWithFormat:@"username=zhangsan&password=zhang"];

    

    // 将请求体字符串转换成二进制数据

    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

    

    //放入请求体

    request.HTTPBody = data;

    

    

    // 2. 发送请求 // POST 请求只能使用下面这个方法!

    [[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

        //处理服务器返回的数据

        NSLog(@"data:%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);

        

    }] resume];

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值