##NSURLRequest


  • NSURLRequest封装了一次网络请求所需要的数据,主要封装了以下信息:

    • 请求路径(URL)
    • 请求方法(GET或POST)
    • 请求头
    • 请求体
    • 超时参数
  • NSURLRequest与其子类NSMutableURLRequest

    • NSURLRequest的所有的请求信息拼接在请求路径(URL)的后面
    • NSMutableURLRequest的请求路径与其他的请求信息分开,其他请求信息通过对应的Key对请求对象进行设置
    • NSURLRequest通常用于GET请求
    • NSMutableURLRequest通常用于POST请求
  • NSURLRequest封装一次网络请求的的步骤

    //1.创建请求路径
    NSString *strURL = [NSString stringWithFormat:@"(此处为URL)/login?username=%@&pwd=%@", @"用户名", @"密码"];
    NSURL *url = [NSURL URLWithString:];
    //2.根据请求路径封装请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
  • NSMutableURLRequest封装一次网络请求的的步骤

    //1.创建请求路径
    NSURL *url = [NSURL URLWithString:@"(此处为URL)/login"];
    //2.创建请求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //3.设置请求方法
    request.HTTPMethod = @"POST";
    //4.设置请求参数
    request.HTTPBody = [@"username="用户名"&pwd="密码" dataUsingEncoding:NSUTF8StringEncoding];
    //5.设置超时
    request.timeoutInterval = 5;

##NSURLConnection


  • NSURLConnection发送请求的步骤

    • 创建请求路径(NSURL)
    • 将请求路径封装成请求对象(NSURLRequest),设置其他请求参数
    • 使用NSURLConnection发送同步/异步请求
  • NSURLConnection的代理

    • NSURLConnectionDelegate

      - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
      /**
      *遇到错误的时候调用,请求终止
      */
    • NSURLConnectionDataDelegate

      - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
      /**
      *接收到服务器响应的时候调用
      *response的中包含了服务器的响应信息,比较有价值是此次请求的数据的总长度
      */
      - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
      /**
      *接收到服务器的数据的时候调用,若数据较多会多次调用
      *通常在该方法中对服务器返回的数据进行存储
      *也可以在该方法中计算下载进度
      */
      - (void)connectionDidFinishLoading:(NSURLConnection *)connection
      /**
      *数据加载完毕的时候调用
      */
    • NSURLConnectionDownloadDelegate

      - (void)connection:(NSURLConnection *)connection didWriteData:(long long)bytesWritten totalBytesWritten:(long long)totalBytesWritten expectedTotalBytes:(long long) expectedTotalBytes
      /**
      *每次向沙盒中写文件都会调用该方法
      */
      - (void)connectionDidResumeDownloading:(NSURLConnection *)connection totalBytesWritten:(long long)totalBytesWritten expectedTotalBytes:(long long) expectedTotalBytes
      /**
      *该方法是支持断点下载的核心
      */
      - (void)connectionDidFinishDownloading:(NSURLConnection *)connection destinationURL:(NSURL *) destinationURL
      /**
      *由于:下载的文件保存在tmp文件夹中,该文件夹中的数据会被系统定时删除
      *所以该方法必须实现,用于将改变数据的存储位置
      */
  • NSURLConnection的请求方式

    • 同步请求(线程会被阻塞)

      NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
      /**
      *data:服务器返回的数据,即请求的数据
      *request:请求请求对象
      *response:服务器的响应数据
      *error:错误信息
      */
    • 异步请求

      //方法一(block)
      [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
      /**
      *请求完成回调的block,参数的含义与铜鼓请求相同
      */
      }];
      //方法二(代理)
      [NSURLConnection connectionWithRequest:request delegate:self]
      /**
      *自动发送请求
      */
      NSURLConnection *connect = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
      /**
      *需要手动发送请求
      */

##URL中的中文处理


  • URL中的中文通要进行处理,通常使用UTF-8编码

    //进行如下转码
    [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]
PS.在Xcode7中,NSURLConnection已经废除了,不能再使用,现在使用的NSURLSession进行代替
 

OC - 12.NSURLRequest与NSURLConnection的更多相关文章

  1. 网络接口 使用NSURLConnection完成Get和Post方法

    网络接口 使用NSURLConnection完成Get和Post方法 什么是URL: URL就是统一资源定位器(UniformResourceLocator:URL).通俗地说,它是用来指出某一项信息 ...

  2. iOS UIWebView 载入https 网站出现NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL,

    今天在载入https网站的时候遇到例如以下的错误问题.所以对自己之前写的iOS内嵌webview做了一些改动,能够让它载入http网站也能够让它载入https网站. 以下是我载入https网站的时候出 ...

  3. NSURLRequest with UserAgent

    关于iOS上的http请求还在不断学习,从早先的时候发现原来iOS的http请求可以自动保存cookie到后来的,发现ASIHttpRequest会有User-Agent,到现在发现竟然NSURLRe ...

  4. Ios之网络编程NSURLConnection

    通过NSURLConnection主要通过四个类进行网络访问:NSURL,NSURLRequest,NSMutableURLRequest,NSURLConnection 一.基本知识 (1)NSUR ...

  5. NSURLConnection经常使用的代理方法

    NSURLConnection的代理Protocol定义有三类:NSURLConnectionDelegate.NSURLConnectionDataDelegate和NSURLConnectionD ...

  6. NSURLConnection / NSURLSession/ SDWebImage

    1. NSURLConnection (iOS9开始被弃用)=========================================== 此类的对象加载一个URL请求对象,通过异步/同步的方 ...

  7. iOS之微信支付

    前言:下面介绍微信支付的开发流程的细节,图文并茂,你可以按照我的随笔流程过一遍代码.包你也学会了微信支付.而且支付也是面试常问的内容. 正文: 1.首先在开始使用微信支付之前,有一些东西是开发者必须要 ...

  8. NSURLCache

    属性介绍: //获取当前应用的缓存管理对象 + (NSURLCache *)sharedURLCache; //设置自定义的NSURLCache作为应用缓存管理对象 + (void)setShared ...

  9. ReactiveCocoa基础知识内容

    本文记录一些关于学习ReactiveCocoa基础知识内容,对于ReactiveCocoa相关的概念如果不了解可以网上搜索:RACSignal有很多方法可以来订阅不同的事件类型,ReactiveCoc ...

随机推荐

  1. getchar

    getchar函数每次只从缓冲区中接受一个字符. getchar有一个int型的返回值. 当程序调用getchar时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字 ...

  2. 在今天,我们为什么还要做一个CMS

    我们今天看到,在这个移动大潮席卷来的这几年,互联网以惊人的速度改变着这个世界.包括我们这个在中国互联网史上有重大影响力的“站长”,也几乎全军覆没.当然随着站长们兴起的开源CMS,到今天也都穷途末路了. ...

  3. 通过分析 JDK 源代码研究 Hash 存储机制

    通过 HashMap.HashSet 的源代码分析其 Hash 存储机制 实际上,HashSet 和 HashMap 之间有很多相似之处,对于 HashSet 而言,系统采用 Hash 算法决定集合元 ...

  4. Hadoop build error java.lang.NoClassDefFoundError: org/sonatype/aether/graph/DependencyFilter

    When running the command: + mvn site site:stage -DskipTests -DskipTest -DskipITs   you get an error: ...

  5. What does enumerable mean?

    I was directed to MDN's for..in page when it said, "for..in Iterates over the enumerable proper ...

  6. php-fpm正在生成页面时,浏览器刷新后,php-fpm会退出吗?

    好久没写博客了,因为没有啥可写. 之所以有此疑问,是因为看了一篇大牛的文章:PHP升级导致系统负载过高问题分析.看完后,其中有些文字触发了我这个想法,也想验证一下. 方案,用tcpdump抓包,用st ...

  7. Bootstrap-风格的下拉按框:Bootstrap Select

    Bootstrap Select 是一个jQuery插件,提供了Bootstrap 风格的下拉选择框.拥有许多自定义的选项,可多选. 效果图: 源代码: <select class=" ...

  8. WordPress公布新文章Email通知注冊用户

    非常多WordPress博客都开放了用户注冊的功能,用户能够參与到博客的内容建设其中来.也就是一个博客由多个用户来写.如今有这种需求,怎样实如今某一个用户发表文章后.其它用户都能收到Email通知?以 ...

  9. jfinal获取当前访问路径和端口号

    public void generateSingleLicense() throws Exception { System.out.println(getRequest().getRequestURL ...

  10. schedule() 和 scheduleAtFixedRate() 的区别--转载

    1.  schedule() ,2个参数方法:在执行任务时,如果指定的计划执行时间scheduledExecutionTime <= systemCurrentTime,则task会被立即执行. ...