S简介

  • NSURLConnection:

      作用:
    1、负责发送请求,建立客户端和服务器的连接发送数据给服务器
    2、并收集来自服务器的响应数据
    步骤:
    1、创建一个NSURL对象,设置请求路径
    2、传入NSURL并创建一个NSURLRequest对象,设置请求头和请求体
    3、使用NSURLConnection发送请求
  • 常见类

          1、NSURL:收纳请求的地址
    
          2、NSURLRequest:一个NSURLRequest对象就代表一个请求,它包含的信息有一个NSURL对象、请求方法、请求头、请求体等等
    
          3、NSMutableURLRequest是NSURLRequest的子类
  • 发送请求

    • 同步请求

      -(void)sendSynchronousRequest{
      //1、创建一个URL
      //协议头+主机地址+接口名称+?+参数1&参数2&参数3
      //这里的话是我自己使用.Net开发的一个本地后台接口 http://192.168.1.0:8080/login?username=LitterL&pwd=123
      NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/login?username=LitterL&pwd=123"]; //2、创建请求(Request)对象(默认为GET请求);
      NSURLRequest *requst = [[NSURLRequest alloc]initWithURL:url]; //3、发送请求
      /*
      第一个参数:请求对象
      第二个参数:响应头
      第三个参数:错误信息
      返回值:NSData类型,响应体信息
      */
      NSError *error = nil;
      NSURLResponse *response = nil;
      //发送同步请求(sendSynchronousRequest)
      NSData *data = [NSURLConnection sendSynchronousRequest:requst returningResponse:&response error:&error];
      //如果没有错误就执行
      if (!error) {
      //打印的服务端返回的信息以及错误信息
      NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
      NSLog(@"%@",error);
      }
      }

      图-1

      补充:

      1、上面的话默认为GET请求,可以看到协议头+主机地址+接口名称+?+参数1&参数2,这里的话教大家一个技巧,如果看到接口后面是带问号(?)那么就证明它为GET请求,至于POST请求的话在异步请求里面会告诉大家
      2、这里的话默认是在主队列执行的,为同步请求,一般不建议大家使用这个,开发人员一般使用的方式是异步执行的,也就是下面这种方式,因为它是在后台线程执行。
    • 异步请求

          -(void)sendAsynchronousRequest{
      //1、创建一个URL
      NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/login"]; //2、创建请求(Request)对象 这里使用的是它的子类NSMutableURLRequest,因为子类才具有设置方法和设置请求体的属性
      NSMutableURLRequest *requst = [[NSMutableURLRequest alloc]initWithURL:url];
      //2.1、设置请求方法
      requst.HTTPMethod = @"POST";
      //2.2、设置请求体,因为传入的为Data数据所有这里需要转换
      requst.HTTPBody = [@"username=LitterL&pwd=123" dataUsingEncoding:NSUTF8StringEncoding];
      //2.3、设置请求超时时间,如果超过这个时间,请求为失败
      requst.timeoutInterval = 10; //3、发送请求 /*
      第一个参数:请求对象
      第二个参数:队列
      第三个参数:Block回调函数
      response:响应头
      data:响应体信息
      connectionError:错误信息
      */ //发送异步请求(sendAsynchronousRequest)
      [NSURLConnection sendAsynchronousRequest:requst queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
      NSLog(@"----%@",[NSThread currentThread]); //解析数据
      NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
      }];
      }

      图-2

      补充:

      1、在这里的话是我们是使用了POST请求,然而使用POST请求那么就必须的使用NSURLRequest的子类NSMutableURLRequest.
      2、只有在它的里面才具有设置请求方法和方法体的属性
    • 代理请求

      • 简述
          //如果你使用的是代理请求的话,那么你需要知道四个方法:
      1、当接受到服务器响应的时候会调用:response(响应头)
      -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response;
      2、当接受到服务器返回数据的时候调用(会调用多次)
      - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;
      3、当请求失败的时候调用
      - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error;
      4、当请求结束(成功|失败)的时候调用
      - (void)connectionDidFinishLoading:(NSURLConnection *)connection;
      • 代码
      1、首先实现代理,并定义一个NSData对象初始化,在请求结束的时候查看服务器传来的内容,
      @interface ViewController ()<NSURLConnectionDataDelegate>
      /** 可变的二进制数据 */
      @property (nonatomic, strong) NSMutableData *fileData;
      @end /*
      懒加载
      */
      -(NSMutableData *)fileData{
      if (!_fileData) {
      _fileData = [[NSMutableData alloc]init];
      }
      return _fileData;
      }
      2、实现代理中的四个方法
      //1.当接受到服务器响应的时候会调用:response(响应头)
      -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
      {
      NSLog(@"接受到相应");
      } //2.当接受到服务器返回数据的时候调用(会调用多次)
      -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
      {
      //
      NSLog(@"接受到数据");
      //拼接数据
      [self.fileData appendData:data];
      } //3.当请求失败的时候调用
      -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
      {
      NSLog(@"请求失败");
      } //4.当请求结束(成功|失败)的时候调用
      -(void)connectionDidFinishLoading:(NSURLConnection *)connection
      {
      NSLog(@"请求结束"); //解析数据
      NSLog(@"%@",[[NSString alloc]initWithData:self.fileData encoding:NSUTF8StringEncoding]);
      }
      3、最后编写点击时调用的方法
      -(void)sendRequestWithDelegate{
      //1.确定请求路径
      NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/login?username=LitterL&pwd=123"];
      //2.创建请求对象
      NSURLRequest *request = [NSURLRequest requestWithURL:url]; //3、代理请求
      /*
      第一个参数:请求对象
      第二个参数:谁成为代理
      第三个参数:startImmediately :是否立即开始发送网络请求
      */
      NSURLConnection *connect = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO];
      //[connect cancel]; 取消
      [connect start];
      }
 

iOS开发网络篇--NSURLConnection的更多相关文章

  1. iOS开发网络篇—NSURLConnection基本使用

    iOS开发网络篇—NSURLConnection基本使用 一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据 ...

  2. iOS开发网络篇—NSURLConnection基本使用(一)

      一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSURL对象,请求方法.请求头.请求体.. ...

  3. iOS开发网络篇—NSURLConnection基本使用(二)

    1.常用的类       NSURL:请求地址 NSURLRequest:一个NSURLRequest对象就代表一个请求,它包含的信息有:      一个NSURL对象      请求方法.请求头.请 ...

  4. swift开发网络篇—NSURLConnection基本使用

    iOS开发网络篇—NSURLConnection基本使用 一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest:封装一个请求,保存发给服务器的全部数据 ...

  5. iOS开发网络篇—数据缓存

      iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造 ...

  6. iOS开发网络篇—大文件的多线程断点下载

    http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时 ...

  7. iOS开发网络篇—HTTP协议

    iOS开发网络篇—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...

  8. iOS开发网络篇—文件的上传

    iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代 ...

  9. iOS开发网络篇—发送json数据给服务器以及多值参数

    iOS开发网络篇—发送json数据给服务器以及多值参数 一.发送JSON数据给服务器 发送JSON数据给服务器的步骤: (1)一定要使用POST请求 (2)设置请求头 (3)设置JSON数据为请求体 ...

随机推荐

  1. WordPress 主题开发 - (一) 前言 待翻译

    原文出自: http://themeshaper.com/2012/10/22/the-themeshaper-wordpress-theme-tutorial-2nd-edition/ THE TH ...

  2. robots.txt用法

    主要作用是告诉蜘蛛爬虫该网站下哪些内容能抓取,哪些内容不能抓取.虽然可以没有robots.txt这个文件,默认就抓取该网站的所有文件,对搜索引擎爬虫没有任何的影响,但是如果你想控制蜘蛛的检索间隔,你就 ...

  3. user-agent中的mozilla

    ie说我等不急了,所以user-agent增加 mozilla标识 这篇文章极其好玩:http://nonfu.me/p/8262.html

  4. always语言指导原则

    1.每个always只有一个@(event-expression). 2.always块可以表示时序逻辑和组合逻辑. 3.带有posedge和negedge关键字的是表示沿触发的时序逻辑,没有的表示组 ...

  5. 网络笔记01-2 scoket

    scoket: 1.socket /** 第一个参数(domain): 表示用什么协议 AF_INET 为IPV4开发 第二个参数(type): 表示scoket为什么类型SOCK_STREAM为TC ...

  6. cocos2dx中的用户数据的管理

    提供了专门的类:CCUserDefault用来管理,且提供了单例方法:sharedUserDefault() 1.会在默认路径cocos2d-x-2.2.3\projects\Hello\proj.w ...

  7. WPF 多线程处理(4)

    WPF 多线程处理(1) WPF 多线程处理(2) WPF 多线程处理(3) WPF 多线程处理(4) WPF 多线程处理(5) WPF 多线程处理(6) 开始一个线程处理读取的文件并且更新到list ...

  8. Reference in the manifest does not match the identity of the downloaded assembly

    solution 1 :http://stackoverflow.com/questions/5337458/error-deploying-clickonce-application-referen ...

  9. Mongo:将查询结果转换为自定义类

    1.自定义类 public class MyClass { public string Name { get; set; } public int Corners { get; set; } } 2. ...

  10. html利用锚点实现定位代码实例

    本章节介绍介绍一下如何利用锚点实现定位,使用锚点实现定位是html固有的功能,当然比较简单,也实现了基本的功能,但是功能相对简单一些,如果想要实现平滑的定位可以参阅jquery实现的点击页面动画方式平 ...