标签:
1、同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作,
2、异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行
3、GET请求,将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性不高,地址最多255字节;
1 -(void)loginByGet 2 { 3 //1.创建NSURL对象,设计连接的地址 4 NSString *strURL =[NSString stringWithFormat:@"http://127.0.0.1/userManager/login.php?username=%@&password=%@",self.userNameTextField.text,self.passwordTextField.text]; 5 NSURL *url = [NSURL URLWithString:strURL]; 6 7 //2.创建NSURLRequest请求对象 8 NSURLRequest *request = [NSURLRequest requestWithURL:url]; 9 /** 10 * NSURLReqest 如果是不可变的,则不可设置超时时间。 11 */ 12 //3.创建NSURLConnection连接对象 13 NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; 14 15 //4.向服务器发送请求 16 [connection start]; 17 }
第二种是使用:POST请求方式
1 -(void)loginByPost 2 { 3 //1.创建NSURL对象,设计连接的地址 4 NSString *strURL = @"http://127.0.0.1/userManager/login.php"; 5 NSURL *url = [NSURL URLWithString:strURL]; 6 7 //2.创建NSURLRequest请求对象 8 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 9 [request setTimeoutInterval:5.0];//设置连接超时的等待时间; 10 [request setHTTPMethod:@"post"];//设置请求方式为POST 11 //设置post带的数据 12 NSString *strBody = [NSString stringWithFormat:@"submit=1&username=%@&password=%@",self.userNameTextField.text,self.passwordTextField.text]; 13 NSData *dataBody = [strBody dataUsingEncoding:NSUTF8StringEncoding]; 14 //通过协议头进行携带数据 15 [request setHTTPBody:dataBody]; 16 17 //3.创建NSURLConnection连接对象 18 NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self]; 19 20 //向服务器发送请求 21 [conn start]; 22 23 }
第三种是使用:同步请求方式
1 -(void)loginByPost 2 { 3 //1.创建NSURL对象,设计连接的地址 4 NSString *strURL = @"http://127.0.0.1/userManager/login.php"; 5 NSURL *url = [NSURL URLWithString:strURL]; 6 //2.创建NSURLRequest请求对象 7 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 8 [request setTimeoutInterval:5.0];//超时时间 9 [request setHTTPMethod:@"post"];//设置使用post方式 10 //设置post带的数据 11 NSString *strBody = [NSString stringWithFormat:@"submit=1&username=%@&password=%@",self.userNameTextField.text,self.passwordTextField.text]; 12 NSData *dataBody = [strBody dataUsingEncoding:NSUTF8StringEncoding]; 13 //通过协议头进行携带数据 14 [request setHTTPBody:dataBody]; 15 16 //3.创建NSURLConnection连接对象 17 NSURLConnection *conn = [NSURLConnection connectionWithRequest:request delegate:self]; 18 //4.向服务器发送请求 19 [conn start]; 20 21 //清理数据 22 NSData *data = [@"" dataUsingEncoding:NSUTF8StringEncoding]; 23 [self.allDatas setData:data]; 24 25 }
在使用NSURLConnection连接对象时,还需要实现<NSURLConnectionDataDelegate>代理方法
1 #pragma mark - NSURLConnection代理方法 2 //收到服务器返回的数据,可能会执行很多次,因为数据如果很大的话,会进行分包发送 3 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 4 { 5 //将所有数据段进行拼接,将新接收的数据段进行追加 6 [self.allDatas appendData:data]; 7 } 8 //连接过程中出错处理 9 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 10 { 11 NSLog(@"error reason:%@",error); 12 } 13 //数据接收完毕,做最后的数据处理 14 -(void)connectionDidFinishLoading:(NSURLConnection *)connection 15 { 16 //当传输的文件中,如果含有汉字的,系统无法识别这种编码 17 unsigned long encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000); 18 //按照encoding这种编码方式,将接收到数据段进行输出 19 NSString *request = [[NSString alloc]initWithData:self.allDatas encoding:encoding]; 20 NSLog(@"%@",request); 21 }
在POST请求方式中,如果希望看到数据传输的进度,可以通过实现以下方法进行打印输出。
1 //以post方式传数据时返回数据传输的进度,仅限于以post方式 2 -(void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite 3 { 4 NSLog(@"bytes:%ld,totalBytes:%ld,totalBytesExpected:%ld",bytesWritten,totalBytesWritten,totalBytesExpectedToWrite); 5 }
GET
POST
等待网络处理中……
标签:
原文地址:http://www.cnblogs.com/xjf125/p/4833318.html