IOS开发笔记-NSURLConnection同步请求和异步请求以及get方法,post方法
2013-12-27 10:22
871 查看
移动互联网时代,移动通信已经使手机客户端必不可少的功能,我们的各种应用中也少不了网络通信,需要增强手机客户端和服务器之间的交换。本文讲介绍NSURLConnection中的同步请求,异步请求,get方法和post方法。
同步请求:数据会造成主线程阻塞,通常在大数据或者网络不畅的情况下不使用,会使用户与UI失去交互,出现程序的卡死,如果数据量少可以使用同步请求。
异步请求:异步请求不会阻塞主线程,会建立一个新的线程来做操作。
不管是异步请求还是同步请求,建立连接的步骤上虽然有所差别,但是不体上是一致的:
1、创建NSURL
2、创建Request对象
3、创建NSURLConnection连接
下面通过一些简单的例子做介绍:
1、#define URL @"http://www.baidu.com"
////////////////同步请求////////////////
//第一步:创建URL
NSURL *myURL=[NSURL URLWithString:URL];
//第二步:创建一个请求
NSURLRequest *myRequest=[NSURLRequest requestWithURL:myURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//第三步:建立连接
NSURLResponse *myResponse=nil;
NSError *myErro=nil;
//向服务器发起请求(发起之后,线程会一直等待服务器响应,直到超出最大响应时间)
NSData *myData=[NSURLConnection sendSynchronousRequest:myRequest returningResponse:&myResponse error:&myErro];
NSLog(@"myData=%@",myData);//输出数据
NSLog(@"myErro=%@",[myErro localizedDescription]);//输出错误
2、////////////////////异步请求///////////////////////
//创建URL
NSURL *myURL=[NSURL
URLWithString:URL];
//创建请求
NSURLRequest *myRuquest=[NSURLRequest
requestWithURL:myURL cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60];
//建立连接(异步的response在专门的代理协议中实现)
[NSURLConnection
connectionWithRequest:myRuquest delegate:self];
异步加载数据需要下面几个方法常用的有四个方法:
#pragma mark URLConnectionDataDelegate
//接受服务器响应--接收到服务器回应的时候会执行该方法
-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse
*)response{
NSLog(@"服务器响应");
self.myData = [NSMutableData
dataWithCapacity:5000];
}
//接收服务器数据--接收服务器传输数据的时候会调用,会根据数据量的大小,多次执行
-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData
*)data
{
NSLog(@"服务器返回数据");
//将返回数据放入缓存区
[self.myData
appendData:data];
}
//显示数据,直到所有的数据接收完毕
-(void) connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"数据接受完毕");
NSLog(@"myData=%@",self.myData);
}
//接受失败的时候调用的方法(断网或者是连接超时)
-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError
*)error
{
NSLog(@"数据接受失败,失败原因:%@",[error localizedDescription]);
}
3、
///////////////get请求/////////////////////
NSString *myStr=self.TextFieldQQ.text;
NSString *strUrl=[@"http://webservice.webxml.com.cn/webservices/qqOnlineWebservice.asmx/qqCheckOnline?qqCode="
stringByAppendingFormat:@"%@",myStr];
//创建URL
NSURL *myUrl=[NSURL URLWithString:strUrl];
//创建请求
NSURLRequest *myRequest=[NSURLRequest requestWithURL:myUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//建立连接
[NSURLConnection connectionWithRequest:myRequest delegate:self];
4、
///////////////////////////////post请求///////////////////////////////
NSString *postStr=@"http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx/qqCheckOnline";
NSURL *postUrl=[NSURL
URLWithString:postStr];
NSMutableURLRequest *postRequest=[NSMutableURLRequest
requestWithURL:postUrl cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60];
//将参数做成字符串
NSString *postStr1=[NSString
stringWithFormat:
@"qqCode=%@",self.TextFieldQQ.text];
//转换成NSData
NSData *postData=[postStr1
dataUsingEncoding:NSUTF8StringEncoding];
//区别点,将参数作为Body体
[postRequest setHTTPBody:postData];
//必须手动声明当前的请求方式为POST(如果不设置,默认的是“GET”方法)
[postRequest setHTTPMethod:@"POST"];
//根据postRequest创建连接,以及执行的协议
[NSURLConnection
connectionWithRequest:postRequest delegate:self];
GET请求:将参数直接写在访问路径上,如:@“http://webservice.webxml.com.cn/webservices/qqOnlineWebservice.asmx/qqCheckOnline?qqCode=”参数容易被外界看到,不安全
POST请求:将参数放在Body里面,如:@"http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx/qqCheckOnline"外界看不到参数,安全性比较高
注意:POST创建的NSURL是不带参数的,需要将请求的参数放入Body中,所以需要用NSMutableURLRequest来创建请求。
参考文章:http://blog.sina.com.cn/s/blog_7ad8771f0101ce5a.html http://m.blog.csdn.net/blog/xyz_lmn/8968182
同步请求:数据会造成主线程阻塞,通常在大数据或者网络不畅的情况下不使用,会使用户与UI失去交互,出现程序的卡死,如果数据量少可以使用同步请求。
异步请求:异步请求不会阻塞主线程,会建立一个新的线程来做操作。
不管是异步请求还是同步请求,建立连接的步骤上虽然有所差别,但是不体上是一致的:
1、创建NSURL
2、创建Request对象
3、创建NSURLConnection连接
下面通过一些简单的例子做介绍:
1、#define URL @"http://www.baidu.com"
////////////////同步请求////////////////
//第一步:创建URL
NSURL *myURL=[NSURL URLWithString:URL];
//第二步:创建一个请求
NSURLRequest *myRequest=[NSURLRequest requestWithURL:myURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//第三步:建立连接
NSURLResponse *myResponse=nil;
NSError *myErro=nil;
//向服务器发起请求(发起之后,线程会一直等待服务器响应,直到超出最大响应时间)
NSData *myData=[NSURLConnection sendSynchronousRequest:myRequest returningResponse:&myResponse error:&myErro];
NSLog(@"myData=%@",myData);//输出数据
NSLog(@"myErro=%@",[myErro localizedDescription]);//输出错误
2、////////////////////异步请求///////////////////////
//创建URL
NSURL *myURL=[NSURL
URLWithString:URL];
//创建请求
NSURLRequest *myRuquest=[NSURLRequest
requestWithURL:myURL cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60];
//建立连接(异步的response在专门的代理协议中实现)
[NSURLConnection
connectionWithRequest:myRuquest delegate:self];
异步加载数据需要下面几个方法常用的有四个方法:
#pragma mark URLConnectionDataDelegate
//接受服务器响应--接收到服务器回应的时候会执行该方法
-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse
*)response{
NSLog(@"服务器响应");
self.myData = [NSMutableData
dataWithCapacity:5000];
}
//接收服务器数据--接收服务器传输数据的时候会调用,会根据数据量的大小,多次执行
-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData
*)data
{
NSLog(@"服务器返回数据");
//将返回数据放入缓存区
[self.myData
appendData:data];
}
//显示数据,直到所有的数据接收完毕
-(void) connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"数据接受完毕");
NSLog(@"myData=%@",self.myData);
}
//接受失败的时候调用的方法(断网或者是连接超时)
-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError
*)error
{
NSLog(@"数据接受失败,失败原因:%@",[error localizedDescription]);
}
3、
///////////////get请求/////////////////////
NSString *myStr=self.TextFieldQQ.text;
NSString *strUrl=[@"http://webservice.webxml.com.cn/webservices/qqOnlineWebservice.asmx/qqCheckOnline?qqCode="
stringByAppendingFormat:@"%@",myStr];
//创建URL
NSURL *myUrl=[NSURL URLWithString:strUrl];
//创建请求
NSURLRequest *myRequest=[NSURLRequest requestWithURL:myUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//建立连接
[NSURLConnection connectionWithRequest:myRequest delegate:self];
4、
///////////////////////////////post请求///////////////////////////////
NSString *postStr=@"http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx/qqCheckOnline";
NSURL *postUrl=[NSURL
URLWithString:postStr];
NSMutableURLRequest *postRequest=[NSMutableURLRequest
requestWithURL:postUrl cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60];
//将参数做成字符串
NSString *postStr1=[NSString
stringWithFormat:
@"qqCode=%@",self.TextFieldQQ.text];
//转换成NSData
NSData *postData=[postStr1
dataUsingEncoding:NSUTF8StringEncoding];
//区别点,将参数作为Body体
[postRequest setHTTPBody:postData];
//必须手动声明当前的请求方式为POST(如果不设置,默认的是“GET”方法)
[postRequest setHTTPMethod:@"POST"];
//根据postRequest创建连接,以及执行的协议
[NSURLConnection
connectionWithRequest:postRequest delegate:self];
GET请求:将参数直接写在访问路径上,如:@“http://webservice.webxml.com.cn/webservices/qqOnlineWebservice.asmx/qqCheckOnline?qqCode=”参数容易被外界看到,不安全
POST请求:将参数放在Body里面,如:@"http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx/qqCheckOnline"外界看不到参数,安全性比较高
注意:POST创建的NSURL是不带参数的,需要将请求的参数放入Body中,所以需要用NSMutableURLRequest来创建请求。
参考文章:http://blog.sina.com.cn/s/blog_7ad8771f0101ce5a.html http://m.blog.csdn.net/blog/xyz_lmn/8968182
相关文章推荐
- iOS海哥开发笔记 (海哥原创,iOS 之同步请求、异步请求、GET请求、POST请求 )
- iOS陆哥开发笔记(二十七) (同步、异步请求, GET、POST请求)
- iOS小明开发笔记(二十六) (同步、异步请求, GET、POST请求)
- iOS开发 -- GET 和 POST请求(同步异步链接)
- iOS开发-Get请求,Post请求,同步请求和异步请求
- iphone 开发第七天 - IOS之同步请求、异步请求、GET请求、POST请求
- IOS开发之NSURL网络请求,同步异步,GET,POST
- iOS开发:网络请求之get、post同步异步请求
- IOS之同步请求、异步请求、GET请求、POST请求
- ios开发笔记—get请求和post请求简单代码
- IOS之同步请求、异步请求、GET请求、POST请求
- iOS中的请求(GET请求,POST请求,同步请求,异步请求)
- IOS网络篇10之NSURLConnection的使用(同步异步下载getpost)
- ios开发网络学习:一:NSURLConnection发送GET,POST请求
- iOS上的http请求:get、post以及同步、异步
- 全面解析iOS中同步请求、异步请求、GET请求、POST请求
- iOS开发 GET、POST 请求方法
- IOS网络请求(同步GET,同步POST,异步GET,异步POST)
- 可以运行测试的IOS同步请求、异步请求、GET请求、POST请求
- iOS 数据请求 同步get 同步post 异步get 异步post