UI进阶 数据请求

一、HTTP和HTTPS协议

  • URL

    • URL全称是Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源,也被称为网址,因特网上标准的资源网址
    • URL就是资源的地址、位置,互联网上的每个资源都有一个唯一的URL
    • URL的基本格式=协议://主机地址/路径?查询
      http://lily:[email protected]/search?hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10#page
    • 协议:不同的协议,代表着不同的资源查找方式,资源传输方式
      • ftp://(文件传输协议)
      • http://(超文本传输协议)
      • https://(安全超文本传输协议)
      • file://(本地文件协议)
    • 主机地址:存放资源的主机的IP地址(域名)
    • 路径:资源在主机中的位置
    • url作为网址字符串包含很多请求参数,NSURL对网址字符串进行封装,可以使用NSURL对象获取相应的参数。
      示例:absoluteString: http://lily:[email protected]/search?hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10#page  
      • host:www.google.com
      • user:lily
      • password:123456
      • port:8080
      • query:hl=en&source=hp&q=mysql&aq=f&oq=&aqi=g10
  • HTTP协议的概念
    • HTTP协议,Hyper Text Transfer Protocol(超文本传输协议)是用于从万维网(WWW)服务器传送超文本到本地浏览器的传输协议,HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。
    • HTTP的工作原理
      • HTTP 协议采用请求/响应模型。客户端向服务器发送一个请求报文,服务器以一个状态作为响应。
  • 了解C/S模式
    • Client和Server常常分别处在相距很远的两台计算机上,Client程序的任务是将用户的要求提交给Server程序,再将Server程序返回的结果以特定的形式显示给用户;Server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序

  • HTTPS
    • HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。 它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。 HTTPS协议使用SSL在发送方把原始数据进行加密,然后在接收方进行解密,加密和解密需要发送方和接受方通过交换共知的密钥来实现,因此,所传送的数据不容易被网络黑客截获和解密
    • 了解SSL
      • SSL是Netscape公司所提出的安全保密协议,在浏览器(如Internet Explorer、Netscape Navigator)和Web服务器(如Netscape的Netscape Enterprise Server、ColdFusion Server等等)之间构造安全通道来进行数据传输,SSL运行在TCP/IP层之上、应用层之下,为应用程序提供加密数据通道
  • HTTP和HTTPS的异同
    • https协议需要到ca申请证书,一般免费证书很少,需要交费。
    • http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
    • http和https使用的是完全不同的链接方式,用的端口也不一样,前者是80,后者是443.
    • http的链接很简单,是无状态的.
    • https是协议是由SSL+HTTP协议构建的可进行加密传输,身份认证的网络协议 要比http安全

二、HTTP协议的常见请求方式

  • 请求方式

    • GET
    • POST
  • 两种请求方式异同点
    • 相同点:都能给服务器传输数据
    • 不同点:
      • 给服务器传输数据的方式不同:
          GET:通过网址字符串.
              POST:通过data
      • 传输数据的大小:
             GET:网址字符串最多255字节.
             POST:使用NSData,容量超过1G
      • 安全性:
             GET:所有传输给服务的数据,显示在网址里,类似于密码的明文输入,直接可见.
             POST:数据被转成NSData(二进制数据),类似于密码的密文输入,无法直接读取.

三、iOS实现网络编程

  • HTTP协议请求如何实现

    • 网络请求地址对象NSURL的作用及用法
    • 网络请求对象NSURLRequest,NSMutableURLRequest的作用及用法
    • 网络链接对象NSURLConnection的作用及用法
    • 网络链接协议NSURLConnectionDelegate的作用及用法
  • 连接方式
    • 同步连接:程序容易出现卡死现象

      • GET同步
      • POST同步
    • 异步连接:等待数据返回
      • GET同步
      • POST同步
    • 异步连接有两种实现方式:
      • 设置代理,接收数据
      • 实现block

    注意:iOS9引入了新特性App Transport Security(ATS),新特性要求App内访问的网络必须使用HTTPS协议,如果你解析的网络使用的是HTTP协议,解决的方法有两个:

      1、在info.plist文件中添加以下代码

            <key>NSAppTransportSecurity</key>
            <dict>
                <key>NSAllowsArbitraryLoads</key>
                <true/>
            </dict>

      2、可视化

  注意:若网址字符串URLString中有类对象,可以使用此方法处理:

  [URLString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];

 1、同步请求

    弊端:会造成卡顿,真正的开发中不建议使用
   NSURLConnection在iOS9之后被弃用,在以后的开发中很少见,取而代之的是NSURLSession

  • NSURLConnection -- GET同步请求

  

 1 #pragma mark - 同步GET请求
 2 - (IBAction)getSynchronousRequest:(UIButton *)sender {
 3     // 1、创建URL
 4     NSURL *url = [NSURL URLWithString:GET_URL];
 5     // 2、根据url创建具体的请求(使用缓存策略)
 6     // 参数1:统一资源定位符url
 7     /**
 8      *  参数2:缓存策略(枚举值)
 9         NSURLRequestUseProtocolCachePolicy = 0   基础缓存策略,使用Protocol协议定义。
10         NSURLRequestReloadIgnoringLocalCacheData = 1  忽略本地的缓存,所有的数据都从网络获取
11         NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4   忽略本地和远程的缓存数据,直接从原始地址下载,与NSURLRequestReloadIgnoringCacheData类似。
12         NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,  忽略本地的缓存,所有的数据都从网络获取
13         NSURLRequestReturnCacheDataElseLoad = 2,   首先使用缓存,如果没有本地缓存,才从原地址下载
14         NSURLRequestReturnCacheDataDontLoad = 3,   使用本地缓存,从不下载,如果本地没有缓存,则请求失败,此策略多用于离线操作
15         NSURLRequestReloadRevalidatingCacheData = 5,  如果本地缓存是有效的则不下载,其他任何情况都从原地址重新下载
16         http://blog.csdn.net/dean19900504/article/details/8134720
17      */
18
19     // 参数3:设置延迟时间,如果超时,请求终止
20     NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20];
21     // 3、链接服务器 [NSURLConnection在iOS9之后被弃用,在以后的开发中很少见]
22     // 参数1:请求对象
23     // 参数2:存储一些网络请求的信息(一般为包体) 一般为nil
24     // 参数3:错误信息
25     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
26     // 4、进行json数据解析
27     NSDictionary *resultDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
28     NSLog(@"resultDict = %@", resultDict);
29 }

同步GET请求

  • NSURLConnection -- POST同步请求

     1 #pragma mark - 同步POST请求
     2 - (IBAction)postSynchronousRequest:(UIButton *)sender {
     3     // 1、创建URL
     4     NSURL *url = [NSURL URLWithString:POST_URL];
     5     // 2、创建可变的网络请求[post请求必须初始化为可变请求,因为稍后要进行一些内容的设置]
     6     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
     7     // 2.5、设置body
     8     // 创建一个连接字符串(这个内容在以后的开发中接口文档都有标注)
     9     NSString *dataString = POST_BODY;
    10     // 对连接字符串进行编码【千万不能忘记】
    11     NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
    12     // 设置请求格式为POST  (POST必须大写)
    13     [request setHTTPMethod:@"POST"];
    14     // 设置请求体(body)
    15     [request setHTTPBody:postData];
    16     // 3、连接服务器
    17     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    18     // 4、解析JSON数据
    19     NSDictionary *resultDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
    20     NSLog(@"%@", resultDict);
    21 }

    同步POST请求

  2、异步请求

  

  

  • NSURLConnection -- GET异步请求

    • block方法

       1 #pragma mark - get异步请求
       2 #pragma mark - block方法
       3 - (IBAction)getAsynchronousRequestWithBlock:(UIButton *)sender {
       4     // 1、创建URL
       5     NSURL *url = [NSURL URLWithString:GET_URL];
       6     // 2、创建请求
       7     NSURLRequest *request = [NSURLRequest requestWithURL:url];
       8     // 3、连接服务器
       9     // 参数1:请求对象
      10     // 参数2:线程队列
      11     // 参数3:block
      12     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
      13         // response:是携带的接口信息
      14         // data:请求下来的数据,接下来会使用到
      15         // connectionError:错误信息
      16
      17         if (connectionError == nil) {
      18             // 4、解析
      19             NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
      20             NSLog(@"%@", dict);
      21
      22             // 先开辟子线程解析数据
      23             // 然后在主线程里刷新UI
      24         }
      25
      26     }];
      27 }

      GET异步请求 block方法

  • NSURLConnection -- GET异步请求
    • 代理(delegate)方法 (NSURLConnectionDataDelegate)

       1 #pragma mark - get异步请求
       2 #pragma mark - 代理方法
       3 - (IBAction)getAsynchronousRequestWithDelegate:(UIButton *)sender {
       4     // 1、创建URL
       5     NSURL *url = [NSURL URLWithString:GET_URL];
       6     // 2、创建请求
       7     NSURLRequest *request = [NSURLRequest requestWithURL:url];
       8     // 3、连接服务器,设置代理
       9     [NSURLConnection connectionWithRequest:request delegate:self];
      10
      11 }
      12
      13 #pragma mark - NSURLConnectionDataDelegate相关代理方法
      14 #pragma mark - 服务器开始响应
      15 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
      16     // 初始化数据
      17     self.resultData = [NSMutableData data];
      18 }
      19
      20 #pragma mark - 接收数据
      21 // 这个方法会重复执行,将得到的每段数据拼接在一起
      22 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
      23     // 数据拼接
      24     [self.resultData appendData:data];
      25 }
      26
      27 #pragma mark - 结束服务器
      28 - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
      29     // 解析数据
      30     NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];
      31     NSLog(@"dict = %@", dict);
      32 }

      GET异步请求 代理(delegate)方法

  • NSURLConnection -- POST异步请求
    • block方法

       1 #pragma mark - post异步请求
       2 #pragma mark - block方法
       3 - (IBAction)postAsynchronousRequestWithBlock:(UIButton *)sender {
       4     // 1、创建URL
       5     NSURL *url = [NSURL URLWithString:POST_URL];
       6     // 2、创建可变网络请求
       7     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
       8     // 2.5、设置body
       9     NSString *dataString = POST_BODY;
      10     // 对连接字符串进行编码
      11     NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
      12     // 设置请求格式为POST
      13     [request setHTTPMethod:@"POST"];
      14     // 设置请求体
      15     [request setHTTPBody:postData];
      16     // 3、连接服务器
      17     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
      18         if (connectionError == nil) {
      19             // 4、解析JSON数据
      20             NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
      21             NSLog(@"%@", dict);
      22         }
      23     }];
      24
      25 }

      POST异步请求 block方法

  • NSURLConnection -- POST异步请求
    • 代理(delegate)方法 (NSURLConnectionDataDelegate)

       1 #pragma mark -post异步请求
       2 #pragma mark - 代理方法
       3 - (IBAction)postAsynchronousRequestWithDelegate:(UIButton *)sender {
       4     // 1、创建URL
       5     NSURL *url = [NSURL URLWithString:POST_URL];
       6     // 2、创建可变网络请求
       7     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
       8     // 2.5、设置body
       9     NSString *dataString = POST_BODY;
      10     // 对连接字符串进行编码
      11     NSData *postData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
      12     // 设置请求格式为POST
      13     [request setHTTPMethod:@"POST"];
      14     // 设置请求体
      15     [request setHTTPBody:postData];
      16     // 3、代理方法
      17     [NSURLConnection connectionWithRequest:request delegate:self];
      18 }
      19 #pragma mark - NSURLConnectionDataDelegate相关代理方法
      20 #pragma mark - 服务器开始响应
      21 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
      22     // 初始化数据
      23     self.resultData = [NSMutableData data];
      24 }
      25
      26 #pragma mark - 接收数据
      27 // 这个方法会重复执行,将得到的每段数据拼接在一起
      28 - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
      29     // 数据拼接
      30     [self.resultData appendData:data];
      31 }
      32
      33 #pragma mark - 结束服务器
      34 - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
      35     // 解析数据
      36     NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];
      37     NSLog(@"dict = %@", dict);
      38 }

      POST异步请求 代理(delegate)方法

四、iOS7之后请求变化

  • NSURLSession

    • 在WWDC 2013中,Apple的团队对NSURLConnection进行了重构,并推出了NSURLSession作为替代。
    • 支持后台运行的网络任务
    • 暂停、停止、重启网络任务,不再需要 NSOpation 封装
    • 请求可以使用同样的配置容器
    • 不同的 session 可以使用不同的私有存储,block和代理可以同时起作用
    • 直接从文件系统上传、下载
    • 为了方便程序员使用,苹果提供了一个全局 session
    • 所有的 任务(Task) 都是由 Session 发起的
    • 所有的任务默认是挂起的,需要 Resume
  • 三种工作模式:
    • 默认会话模式(default)
    • 瞬时会话模式(ephemeral)
    • 后台会话模式(background)
  • NSURLSession支持的三种任务
    • 加载数据(NSURLSessionDataTask)
    • 下载(NSURLSessionDownloadTask)
    • 上传(NSURLSessionUploadTask)
      注:对数据进行加载,使用NSURLSessionDataTask和NSURLSessionTask,没有本质区别;要处理下载任务的使用:NSURLSessionDownloadTask; 要处理上传任务时使用:NSURLSessionUploadTask
  • NSURLSession数据任务
    • 适合于小的数据访问,例如:
           1 JSON
           2 XML
           3 Plist
           4 HTML
           5 图像
  • NSURLSession补充知识
    • NSURLSessionConfiguration类:用于配置会话的属性,可以通过该类配置会话的工作模式
    • NSURLSessionTask类:NSURLSessionTask是一个抽象子类,它有三个子类:NSURLSessionDataTask,NSURLSessionUploadTask和NSURLSessionDownloadTask。这三个类封装了现代应用程序的三个基本网络任务:获取数据,比如JSON或XML,以及上传和下载数据。
    • NSURLSessionDelegate和NSURLSessionTaskDelegate协议
  • NSURLSession -- GET异步请求

    • block方法

  

 1 #pragma mark - get异步请求(block)
 2 - (IBAction)getRequestWithBlock:(UIButton *)sender {
 3     // 1、创建URL
 4     NSURL *url = [NSURL URLWithString:GET_URL];
 5     // 2、创建Session对象
 6     NSURLSession *session = [NSURLSession sharedSession];
 7     // 3、创建task请求任务
 8     // NSURLSession是基于任务去完成相关的事件的。
 9     // NSURLSessionDataTask,所有的任务均放在这里实现。(对数据进行加载,使用NSURLSessionDataTask和NSURLSessionTask,没有本质区别;要处理下载任务的使用:NSURLSessionDownloadTask; 要处理上传任务时使用:NSURLSessionUploadTask)
10     NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
11         if (error == nil) {
12             // 4、解析相关数据
13             NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
14             NSLog(@"dict = %@", dict);
15         }
16     }];
17     // 5、核心步骤:启动任务。-- NSURLSessionTask的实例如果不启动,会处于挂起状态,不会走block中实现的内容
18     [task resume];
19 }

GET异步请求 block方法

  • NSURLSession -- GET异步请求

    • 代理(delegate)方法  (NSURLSessionDataDelegate)

       1 #pragma mark - get异步请求(代理)
       2 - (IBAction)getRequestWithDelegate:(UIButton *)sender {
       3     // 1、创建URL
       4     NSURL *url = [NSURL URLWithString:GET_URL];
       5     // 2、创建session
       6     /**
       7         参数1:模式的设置
       8         defaultSessionConfiguration  默认会话模式
       9         ephemeralSessionConfiguration  瞬间会话模式
      10         backgroundSessionConfigurationWithIdentifier: 后台会话模式
      11      */
      12     // 参数2:代理
      13     // 参数3:线程队列
      14     NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
      15     // 4、创建task
      16     NSURLSessionDataTask *task = [session dataTaskWithRequest:[NSURLRequest requestWithURL:url]];
      17     // 核心步骤:启动任务
      18     [task resume];
      19 }
      20
      21 #pragma mark - NSURLSessionDataDelegate协议的方法实现
      22 // 服务器开始响应
      23 - (void)URLSession:(NSURLSession *)session dataTask:(nonnull NSURLSessionDataTask *)dataTask didReceiveResponse:(nonnull NSURLResponse *)response completionHandler:(nonnull void (^)(NSURLSessionResponseDisposition))completionHandler {
      24     // 允许服务器响应,只有允许服务器响应,才会接收到数据
      25     completionHandler(NSURLSessionResponseAllow);
      26     // 初始化data,稍后进行拼接
      27     self.resultData = [NSMutableData data];
      28 }
      29
      30 // 接收数据
      31 // 这个方法会进行多次,将得到的每个data拼接到一起
      32 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
      33     // 拼接
      34     [self.resultData appendData:data];
      35 }
      36
      37 // 数据接收完成,网络请求结束
      38 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
      39     // 解析数据
      40     if (error == nil) {
      41         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];
      42         NSLog(@"dict = %@", dict);
      43     }
      44 }

      GET异步请求 代理(delegate)方法

  • NSURLSession -- POST异步请求
    • block方法

       1 #pragma mark - post异步请求(block)
       2 - (IBAction)postRequestWithBlock:(UIButton *)sender {
       3     // 1、创建URL
       4     NSURL *url = [NSURL URLWithString:POST_URL];
       5     // 2、创建网络请求
       6     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
       7     // 2.5、设置body
       8     NSString *bodyString = POST_BODY;
       9     NSData *bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
      10     [request setHTTPMethod:@"POST"];
      11     [request setHTTPBody:bodyData];
      12
      13     // 3、创建session
      14     NSURLSession *session = [NSURLSession sharedSession];
      15     // 4、创建task
      16     NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
      17         if (error == nil) {
      18             // 5、解析数据
      19             NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
      20             NSLog(@"dict = %@", dict);
      21         }
      22     }];
      23     // 6、启动任务
      24     [task resume];
      25
      26 }

      POST异步请求 block方法

  • NSURLSession -- POST异步请求
    • 代理(delegate)方法    (NSURLSessionDataDelegate)

       1 #pragma mark - post异步请求(代理)
       2 - (IBAction)postRequestWithDelegate:(UIButton *)sender {
       3     // 1、创建URL
       4     NSURL *url = [NSURL URLWithString:POST_URL];
       5     // 2、创建网络请求
       6     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
       7     // 2.5、设置body
       8     NSString *bodyString = POST_BODY;
       9     NSData *bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
      10     [request setHTTPMethod:@"POST"];
      11     [request setHTTPBody:bodyData];
      12
      13     // 3、创建session
      14     NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
      15     NSURLSessionDataTask *task = [session dataTaskWithRequest:request];
      16     [task resume];
      17
      18 }
      19
      20 #pragma mark - NSURLSessionDataDelegate协议的方法实现
      21 // 服务器开始响应
      22 - (void)URLSession:(NSURLSession *)session dataTask:(nonnull NSURLSessionDataTask *)dataTask didReceiveResponse:(nonnull NSURLResponse *)response completionHandler:(nonnull void (^)(NSURLSessionResponseDisposition))completionHandler {
      23     // 允许服务器响应,只有允许服务器响应,才会接收到数据
      24     completionHandler(NSURLSessionResponseAllow);
      25     // 初始化data,稍后进行拼接
      26     self.resultData = [NSMutableData data];
      27 }
      28
      29 // 接收数据
      30 // 这个方法会进行多次,将得到的每个data拼接到一起
      31 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
      32     // 拼接
      33     [self.resultData appendData:data];
      34 }
      35
      36 // 数据接收完成,网络请求结束
      37 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
      38     // 解析数据
      39     if (error == nil) {
      40         NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:self.resultData options:NSJSONReadingAllowFragments error:nil];
      41         NSLog(@"dict = %@", dict);
      42     }
      43 }

      POST异步请求 代理(delegate)方法

总结:

HTTP是超文本传输协议,HTTPS是安全超文本传输协议

GET和POST是请求方式

同步,异步是连接方式

网络请求的步骤:1、NSURL;2、NSURLRequest;3、NSURLConnection;4、处理Error或者返回数据

NSURLSession是iOS7中新的网络处理方式,NSURLConnection在iOS较早版本中使用广泛。

时间: 2024-11-09 00:56:38

UI进阶 数据请求的相关文章

[IOS多线程]的使用:防止进行HTTP数据请求时,UI卡死。

一.非多线程HTTP请求 如果不使用多线程,IOS的HTTP访问请求,以登录的模式为例,是这样: //此为不正确的代码 //成功进行登录验证后进入到下一ViewController -(void)presentToNextview{ //到下一界面 } //登录验证 -(void)loginCheck{ //包含POST或GET请求来完成数据的验证,验证成功就跳转到下一界面 } -(void)showindicator{ //显示登录时转圈圈的菊花 } //登录按钮的点击事件 -(IBActio

UI进阶 即时通讯之XMPP好友列表、添加好友、获取会话内容、简单聊天

这篇博客的代码是直接在上篇博客的基础上增加的,先给出部分代码,最后会给出能实现简单功能的完整代码. UI进阶 即时通讯之XMPP登录.注册 1.好友列表 初始化好友花名册 1 #pragma mark - 管理好友 2 // 获取管理好友的单例对象 3 XMPPRosterCoreDataStorage *rosterStorage = [XMPPRosterCoreDataStorage sharedInstance]; 4 // 用管理好友的单例对象初始化Roster花名册 5 // 好友操

网络数据的下载(NSUrlconnection异步下载和NSstring同步下载)和UI界面数据的刷新(都是抛弃第三方库的一些本质)

<1>NSString同步下载        //字符串的类方法,会根据url向服务器发起同步的数据请求,并将请求结果作为返回值    //同步请求数据,会对程序的UI主线程造成阻塞,用户体验极差 NSString *str = [NSString stringWithContentsOfURL:[NSURL URLWithString:kUrl] encoding:NSUTF8StringEncoding error:nil];    //json格式的数据 进行json解析 数据最外层是

Android更新Ui进阶精解(二)

<代码里的世界> 用文字札记描绘自己 android学习之路 转载请保留出处 by Qiao http://blog.csdn.net/qiaoidea/article/details/45115047 Android更新Ui进阶精解(一) android ui线程检查机制 Android更新Ui进阶精解(二) android 线程更新UI机制 1.回顾 第一篇讲了对Ui线程更新的方法和见解,然后接着讲了线程检查机制,这里来详细分析下更新Ui的核心--Android中消息系统模型.当然,这里要

ios NSURLRequest NSMutableURLRequest 数据请求

get 请求 #pragma mark - GET登录 - (void)getLogon { // 1. URL NSString *urlStr = [NSString stringWithFormat:@"http://localhost/login.php?username=%@&password=%@", self.userName.text, self.userPwd.text]; NSURL *url = [NSURL URLWithString:urlStr];

java 接口自动化测试之数据请求的简单封装

我们自己用java写接口自动化测试框架或者做个接口自动化测试平台的话,是需要自己进行相关的请求的,因此我们需要简单的封装下httpclient,我新建了一个http工具类,将get方法和post方法进行了一个简单的封装. 如果是开发的话,比如APP开发,无论是iOS还是Android,是需要将数据请求进行十分严密的封装的,因为需要对各种网络状态,请求状态做相应的判断处理,因为需要通过这些判断来做出相应的UI交互界面来给用户提示,那么我们做接口测试的话是不需要这么严密的,因为测试的前提就是要保证测

Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))

1.回想 上篇 使用 Volley 的 JsonObjectRequest 和 ImageLoader 写了 电影列表的样例 2.重点 (1)封装Volley 内部 请求 类(请求队列,数据请求,图片请求,图片缓存) (2)封装 Response.Listener 和 Response.ErrorListener 回调函数 (3)用法 3.文件夹介绍 3.1 GsonRequset.java 自己定义Gson请求,直接将 Json字符串  实例化为 对象 3.2 VolleyApplicatio

一种Android数据请求框架

大部分Android应用一般都涉及到跟server的交互,除非是某些单机应用.既然要跟server打交道,向server请求数据差点儿是必做的事情,或许每家的APP都有一套自己的详细实现逻辑.但我们还是能够抽象出来一个通用的数据请求框架. 先上图: 我们来详细分析一下.首先竖直虚线左側是Androidclient.右側是server.后台数据库. 左側图中,3个灰色的模块就是Android中的MVC(具体介绍请參考之前的一篇文字<Android中的MVC模式简单介绍>),当中Activity或

android UI进阶之实现listview中checkbox的多选与记录

今天继续和大家分享涉及到listview的内容.在很多时候,我们会用到listview和checkbox配合来提供给用户一些选择操作.比如在一个清单页面,我们需要记录用户勾选了哪些条目.这个的实现并不太难,但是有很多朋友来问我如何实现,他们有遇到各种各样的问题,这里就一并写出来和大家一起分享. ListView的操作就一定会涉及到item和Adapter,我们还是先来实现这部分内容. 首先,写个item的xml布局,里面放置一个TextView和一个CheckBox.要注意的时候,这里我设置了C