ios同步请求,异步请求,GET请求,POST请求
区别:
1、同步请求可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作;
2、异步请求不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行;
3、GET请求,将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性不高,地址最多255字节;
4、POST请求,将参数放到body里面。POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获。
Post请求,需要先弄一个数据体,将数据体提交给服务器,才能获取到服务器的响应,性能不好,效率低。但是安全性高!
接下来我们看看post和get请求的同步和异步请求:
1 //异步get请求 2 // 1.设置请求路径 3 NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text]; 4 NSURL *url=[NSURL URLWithString:urlStr]; 5 // 2.创建请求对象 6 NSURLRequest *request=[NSURLRequest requestWithURL:url]; 7 8 // 3.发送请求 9 NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
1 //异步post方法 2 3 // 1.设置请求路径 4 NSURL *URL=[NSURL URLWithString:@"http://192.168.1.53:8080/MJServer/login"];//不需要传递参数 5 // 2.创建请求对象 6 NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:URL];//默认为get请求 7 request.timeoutInterval=5.0;//设置请求超时为5秒 8 request.HTTPMethod=@"POST";//设置请求方法 9 //设置请求体 10 NSString *param=[NSString stringWithFormat:@"username=%@&pwd=%@",self.username.text,self.pwd.text]; 11 //把拼接后的字符串转换为data,设置请求体 12 request.HTTPBody=[param dataUsingEncoding:NSUTF8StringEncoding]; 13 // 3.发送请求 14 NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];
1 //异步方法代理 2 3 //接收到服务器回应的时候调用此方法 4 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 5 { 6 NSHTTPURLResponse *res = (NSHTTPURLResponse *)response; 7 NSLog(@"%@",[res allHeaderFields]); 8 } 9 10 //接收到服务器传输数据的时候调用,此方法根据数据大小执行若干次 11 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 12 { 13 } 14 15 //数据传完之后调用此方法 16 -(void)connectionDidFinishLoading:(NSURLConnection *)connection 17 { 18 } 19 20 21 //网络请求过程中,出现任何错误(断网,连接超时等)会进入此方法 22 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ 23 NSLog(@"%@",[error localizedDescription]); 24 }