IOS开发笔记-NSURLConnection同步请求和异步请求以及get方法,post方法

来源:互联网 发布:淘宝自定义模块代码 编辑:程序博客网 时间:2024/06/04 23:27

        移动互联网时代,移动通信已经使手机客户端必不可少的功能,我们的各种应用中也少不了网络通信,需要增强手机客户端和服务器之间的交换。本文讲介绍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=[NSURLURLWithString:URL];

    //创建请求

    NSURLRequest *myRuquest=[NSURLRequestrequestWithURL:myURL cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:60];

    //建立连接(异步的response在专门的代理协议中实现)

    [NSURLConnectionconnectionWithRequest:myRuquest delegate:self];


异步加载数据需要下面几个方法常用的有四个方法:

#pragma mark URLConnectionDataDelegate

//接受服务器响应--接收到服务器回应的时候会执行该方法

-(void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{

    

    NSLog(@"服务器响应");

    

    self.myData = [NSMutableDatadataWithCapacity:5000];

}

//接收服务器数据--接收服务器传输数据的时候会调用,会根据数据量的大小,多次执行

-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

{

    NSLog(@"服务器返回数据");

    

    //将返回数据放入缓存区

    [self.myDataappendData: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=[NSURLURLWithString:postStr];

    

    NSMutableURLRequest *postRequest=[NSMutableURLRequestrequestWithURL:postUrl cachePolicy:NSURLRequestUseProtocolCachePolicytimeoutInterval:60];

    //将参数做成字符串

    NSString *postStr1=[NSStringstringWithFormat: @"qqCode=%@",self.TextFieldQQ.text];

    //转换成NSData

    NSData *postData=[postStr1dataUsingEncoding:NSUTF8StringEncoding];

    //区别点,将参数作为Body

    [postRequest setHTTPBody:postData];

    //必须手动声明当前的请求方式为POST(如果不设置,默认的是“GET”方法)

    [postRequest setHTTPMethod:@"POST"];

    //根据postRequest创建连接,以及执行的协议

    [NSURLConnectionconnectionWithRequest: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










0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 毛孔变粗大长痘怎么办 皮肤粗糙暗黄毛孔大怎么办 毛孔粗大还有痘印怎么办 高一的不爱上数学怎么办 监狱系统需要体测怀孕怎么办 货运从业资格证年审过期了怎么办 科三线路记不住怎么办? 汽车大灯里面起雾水怎么办 二级重伤对方法庭拒绝赔偿怎么办? 在麦当劳工作收到假钞怎么办 东西湖小学分配太远怎么办 农行k令过期了怎么办 穿军训的鞋捂坏了怎么办 联通手机号销户话费怎么办 建行员工所持有的原始股怎么办 孕妇喝了午时茶怎么办 苹果6id被锁了怎么办 苹果手机app密码忘了怎么办 好哥们借钱手上没钱怎么办 武汉ca证书u盾怎么办 判了刑发现还有漏案没判怎么办 高铁旅客漏乘怎么办 水库里面要养殖小龙虾最好怎么办 点读机的笔丢了怎么办 皮肤晒的很黑怎么办 电脑wifi连接受限制怎么办 高中孩子班管理松怎么办 脱式计算有余数怎么办 手机被别人绑定微信怎么办 饿了么入职查不到学历怎么办 高中没考上家人让打工怎么办 一建证书丢了怎么办 自考大专证书丢了怎么办 护士学分卡丢了怎么办 公司电脑只能用内网怎么办 遇见素质低的人怎么办 被素质低的人骂怎么办 对素质差的人怎么办 碰到素质低的人怎么办 和韩国人结婚后工作怎么办 大连明珠卡坏了怎么办