您的位置:首页 > 移动开发 > IOS开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息