Get的同步以及异步
1.Get的同步请求
- (NSURLRequest *)getLoginRequest
{
NSString *userName = _userName.text;
NSString *password = [_password.text companyMD5];
NSLog(@"%@", [_password.text MD5]);
NSLog(@"%@", password);
// 1. 网络地址URL
NSString *urlString = [NSStringstringWithFormat:@"http://192.168.3.251/~apple/itcast/login.php?username=%@&password=%@", userName, password];
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlString];
// 2. 请求
// 1> url
// 2> 缓存策略
// 3> 超时时长
// 提示:因为网络的状态是未知的,因此要使用URLRequest一定要指定超时时长
// 否则会严重影响用户体验!
return [NSURLRequestrequestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:2.0f];
15 16 #pragma mark 同步登录请求 17 - (IBAction)syncLogin 18 { 19 // 1. 建立请求 20 NSURLRequest *request = [self getLoginRequest]; 21 22 // 在OC中,凡是看到__autoreleasing标示符的,表示参数需要传入地址,所谓地址就是添加“&” 23 NSURLResponse *response = nil; 24 NSError *error = nil; 25 26 // 同步请求的应用场景:例如:网银账户的登录! 27 // 一定要获取到某个网络返回数据后,才能进行下一步操作的场景! 28 // 发送同步请求,respone&error要带地址的原因就是为了方法执行后,能够方便使用response&error 29 NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 30 31 // 提示,上面的网络同步请求不完成,下面一句话是不会执行到的! 32 if (data != nil) { 33 // 网络请求正常 34 35 // 将data转换为字符串 36 NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 37 38 [self showMessageWithResult:result]; 39 } else if (data == nil && error == nil) { 40 // 网络返回空数据 41 NSLog(@"接收到空数据"); 42 } else { 43 NSLog(@"%@", error.localizedDescription); 44 } 45 }
2.Get的异步登陆方法
1 - (NSURLRequest *)getLoginRequest 2 { 3 NSString *userName = _userName.text; 4 NSString *password = [_password.text companyMD5]; 5 NSLog(@"%@", [_password.text MD5]); 6 NSLog(@"%@", password); 7 8 // 1. 网络地址URL 9 NSString *urlString = [NSString stringWithFormat:@"http://192.168.3.251/~apple/itcast/login.php?username=%@&password=%@", userName, password]; 10 urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 11 12 NSURL *url = [NSURL URLWithString:urlString]; 13 14 // 2. 请求 15 // 1> url 16 // 2> 缓存策略 17 // 3> 超时时长 18 // 提示:因为网络的状态是未知的,因此要使用URLRequest一定要指定超时时长 19 // 否则会严重影响用户体验! 20 return [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:2.0f]; 21 22 } 23 24 25 - (IBAction)asyncLogin 26 { 27 // 1. request 28 NSURLRequest *request = [self getLoginRequest]; 29 30 // 异步登录 31 // 后台耗时的任务,与界面无关的操作会放在后台线程中执行。 32 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 33 34 [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { 35 // 块代码的内容会在网络访问后执行 36 // 块代码是预先定义好的代码片段,在满足某个条件时执行的。 37 NSLog(@"%@", [NSThread currentThread]); 38 39 if (data != nil) { 40 // 网络请求正常 41 42 // 将data转换为字符串 43 NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 44 45 [[NSOperationQueue mainQueue] addOperationWithBlock:^{ 46 [self showMessageWithResult:result]; 47 }]; 48 } else if (data == nil && connectionError == nil) { 49 // 网络返回空数据 50 NSLog(@"接收到空数据"); 51 } else { 52 NSLog(@"%@", connectionError.localizedDescription); 53 } 54 }]; 55 56 NSLog(@"come here"); 57 }