码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开发之HTTP请求之发送用户名和密码

时间:2015-11-27 00:59:24      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

在进行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;
}

 



 


 

iOS开发之HTTP请求之发送用户名和密码

标签:

原文地址:http://www.cnblogs.com/wuhongxing/p/4999365.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!