zoukankan      html  css  js  c++  java
  • 网络开发--NSURLConnection类的简单介绍

     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);

  • 相关阅读:
    MySQL-5.7.26解压版安装教程
    asp.net core 系列之Configuration
    java之初识hibernate
    java框架学习系列
    java之struts2之异常处理
    java之struts2之ajax
    java之servlet之文件下载
    列出连通集
    幸运数
    英文单词排序
  • 原文地址:https://www.cnblogs.com/moxuexiaotong/p/4858919.html
Copyright © 2011-2022 走看看