在进行iOS开发的时候,几乎每个应用都是要用到登录功能的!
众所周之,GET请求在网络请求中是很不安全的。因为他会直接暴露你的用户名和密码。
那么只能使用POST请求了,那么问题来了?POST是怎么发送的?用POST就安全了吗?
平时大家进行网络请求的时候大部分使用的都是AFNetworking。所以可能对系统的使用的也不多!
我今天写的这个就是用系统直接请求而没有用AFNetworking(三方库只用了一个MBProgressHUD)。
//为了速度我就直接使用storyBoard而不写代码了 @interface HMViewController () @property (weak, nonatomic) IBOutlet UITextField *username; @property (weak, nonatomic) IBOutlet UITextField *pwd; - (IBAction)login; @end
//这段代码虽然短但也挺常用,是iOS常用的退出键盘的一种方法 - (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协议,因为登录不需要长连接,就发送一次就可以了,用TCP太过于耗时) // 创建一个URL : 请求路径(这是我本地自己搭建的一个服务器,以后有时候详细说怎么搭建一个属于自己的测试服务器,一般如果去公司,后台会给你的) NSURL *url = [NSURL URLWithString:@"http://localhost:9090/user-summary.jsp"]; // 创建一个请求 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; // 5秒后算请求超时(默认60s超时) request.timeoutInterval = 5; //设置请求的格式为"POST" request.HTTPMethod = @"POST"; //对密码进行加密 pwdText = [self MD5Reorder:pwdText]; // 设置请求体 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]; // 这个block会在请求完毕的时候自动调用 if (connectionError || data == nil) { // 一般请求超时就会来到这 [MBProgressHUD showError:@"请求失败"]; return; } // 解析服务器返回的JSON数据 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; NSString *error = dict[@"error"]; if (error) { [MBProgressHUD showError:error]; } else { NSString *success = dict[@"success"]; [MBProgressHUD showSuccess:success]; } }]; } }
/** * MD5($pass.$salt) * * @param text 明文 * * @return 加密后的密文 */ - (NSString *)MD5Salt:(NSString *)text { // 撒盐:随机地往明文中插入任意字符串 NSString *salt = [text stringByAppendingString:@"aaa"]; return [salt md5String]; } /** * MD5(MD5($pass)) * * @param text 明文 * * @return 加密后的密文 */ - (NSString *)doubleMD5:(NSString *)text { return [[text md5String] md5String]; } /** * 先加密,后乱序 * * @param text 明文 * * @return 加密后的密文 */ - (NSString *)MD5Reorder:(NSString *)text { NSString *pwd = [text md5String]; // 加密后pwd == 3f853778a951fd2cdf34dfd16504c5d8 NSString *prefix = [pwd substringFromIndex:2]; NSString *subfix = [pwd substringToIndex:2]; // 乱序后 result == 853778a951fd2cdf34dfd16504c5d83f NSString *result = [prefix stringByAppendingString:subfix]; NSLog(@"\ntext=%@\npwd=%@\nresult=%@", text, pwd, result); return result; }
时间: 2024-11-10 08:15:35