码迷,mamicode.com
首页 > Web开发 > 详细

网络开发--NSURLConnection类的简单介绍

时间:2015-10-07 20:15:31      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

 NSURL 请求地址
 NSURLRequest  封装一个请求,保存发给服务器的全部数据
 NSMutableURLRequest  NSURLRequest的子类,提供了改变请求的属性的方法
 NSURLConnection 负责发送请求,建立客户端和服务器的连接。发送NSURLRequest的数据给服务器,并收集来自服务器的响应数据

 

 

 

 

 

 

 

 

 

 

NSMutableURLRequest改变请求的属性方法如下:

NSURL *url = [NSURL urlWithString@"http://server.com/postme"]; 
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url]; 
[req setHTTPMethod:@"POST"];
[req setHTTPBody:[@"Post body" dataUsingEncoding:NSUTF8StringEncoding]];

 

使用NSURLConnection发送请求主要有三步:

(1)创建一个NSURL对象,设置请求路径;

(2)传入NSURL创建一个NSURLRequest对象,设置请求头和请求体;

(3)使用NSURLConnection发送NSURLRequest(发送请求)。

技术分享

(整理自大神:http://www.cnblogs.com/wendingding/p/3813572.html);

 

同步请求 从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作,
异步请求 不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行
GET加载方式 将参数直接写在访问路径上。操作简单,不过容易被外界看到,安全性不高,地址最多255字节;
POST加载方式

将参数放到body里面。POST请求操作相对复杂,需要将参数和地址分开,不过安全性高,参数放在body里面,不易被捕获。

 

 

 

 

 

 

 

 

 

 

get异步请求:

 1     //第一步,创建url
 2  
 3     NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do?type=focus-c"];
 4  
 5     //第二步,创建请求
 6  
 7     NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
 8  
 9     //第三步,连接服务器
10  
11     NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];

post异步请求:

    //第一步,创建url
 
    NSURL *url = [NSURL URLWithString:@"http://api.hudong.com/iphonexml.do"];
 
    //第二步,创建请求
 
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
 
    [request setHTTPMethod:@"POST"];
 
    NSString *str = @"type=focus-c";
 
    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
 
    [request setHTTPBody:data];
 
    //第三步,连接服务器
 
    NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:request delegate:self];

缓存协议(枚举类型)

      NSURLRequestUseProtocolCachePolicy(基础策略)
      NSURLRequestReloadIgnoringLocalCacheData(忽略本地缓存)
      NSURLRequestReturnCacheDataElseLoad(首先使用缓存,如果没有本地缓存,才从原地址下载)
      NSURLRequestReturnCacheDataDontLoad(使用本地缓存,从不下载,如果本地没有缓存,则请求失败,此策略多用于离线操作)
      NSURLRequestReloadIgnoringLocalAndRemoteCacheData(无视任何缓存策略,无论是本地的还是远程的,总是从原地址重新下载)
      NSURLRequestReloadRevalidatingCacheData(如果本地缓存是有效的则不下载,其他任何情况都从原地址重新下载)

(整理自大神:http://my.oschina.net/sunqichao/blog/75011);

HTTP Status Code:HTTP状态码,用以表示网页服务器HTTP响应状态的3位数字代码,它由 RFC 2616 规范定义。

服务器返回数据时,NSURLConnectionDelegate的代理方法:

//当接收到服务器的响应(连通了服务器)时会调用
- (void)connection:(NSURLConnection *)theConnection didReceiveResponse:(NSURLResponse *)response{
}
//当接收到服务器的数据时会调用(可能会被调用多次,每次只传递部分数据)
- (void)connection:(NSURLConnection *)aConn didReceiveData:(NSData *)data
{
}
//当服务器的数据加载完毕时就会调用
- (void)connectionDidFinishLoading:(NSURLConnection *)aConn
{
}
//请求错误(失败)的时候调用(请求超时\断网\没有网\,一般指客户端错误)
- (void)connection:(NSURLConnection *)aConn didFailWithError:(NSError *)error
{
}

 

苹果自带的NSJSONSerialization基于json的数据包封装和解析(相关第三方解析json类库有TouchJson,JSONKit,SBJon等)

封装:

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",@"value3",@"key3", nil];
    // isValidJSONObject判断对象是否可以构建成json对象
    
    if ([NSJSONSerialization isValidJSONObject:dic]){
        NSError *error;
        // 创造一个json从Data, NSJSONWritingPrettyPrinted指定的JSON数据产的空白,使输出更具可读性。
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&error];
        NSString *json =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
        NSLog(@"json data:%@",json);
    }

 

解析:

NSError *error;  
    //加载一个NSURL对象  
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.weather.com.cn/data/101120101.html"]];  
    //将请求的url数据放到NSData对象中  
    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];  
    //IOS自带解析类NSJSONSerialization从response中解析出数据放到字典中  
    NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error];  
    NSDictionary *weatherInfo = [weatherDic objectForKey:@"weatherinfo"];  
    NSString *text = [NSString stringWithFormat:@"今天是 %@  %@  %@  的天气状况是:%@  %@ ",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"], [weatherInfo objectForKey:@"weather1"], [weatherInfo objectForKey:@"temp1"]];  
    NSLog(@"weatherInfo:%@", text ); 

(整理自大神:http://blog.csdn.net/xyz_lmn/article/details/8968187);

网络开发--NSURLConnection类的简单介绍

标签:

原文地址:http://www.cnblogs.com/moxuexiaotong/p/4858919.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!