zoukankan      html  css  js  c++  java
  • ios url的网络编程

    http://wenku.baidu.com/view/b99a07d8ce2f0066f533229d.html

    前言:理论上讲iPhone可以访问任何协议的端口,我们这里只讲述基于URL的网络编程。

    一、支持的协议

    文件传输协议(ftp://)、超文本传输协议(http://)、超文本传输协议(https://)、本地文件路径(file:///)。

     

    二、访问url内容的步骤

    1、构造NSURL

    2、生成一个NSURLRequest

    3、通过NSURLConnection发送请求

    4、通过返回的NSURLResponse和NSError分析结果

    下面,将详细介绍每一步:

    1、NSURL

    2、NSURLRequest

         2.1 封装了一个针对某个URL的请求信息

         构造方法:

    + (id)requestWithURL:(NSURL *)URL;
    
    + (id)requestWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval;
    
    - (id)initWithURL:(NSURL *)URL;
    
    - (id)initWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolicy timeoutInterval:(NSTimeInterval)timeoutInterval;

         2.2 可以指明内容的缓存策略

    enum
    {
        NSURLRequestUseProtocolCachePolicy = 0,
    
        NSURLRequestReloadIgnoringLocalCacheData = 1,
        NSURLRequestReloadIgnoringLocalAndRemoteCacheData = 4, // Unimplemented
        NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData,
    
        NSURLRequestReturnCacheDataElseLoad = 2,
        NSURLRequestReturnCacheDataDontLoad = 3,
    
        NSURLRequestReloadRevalidatingCacheData = 5, // Unimplemented
    };
    typedef NSUInteger NSURLRequestCachePolicy;

           2.3 如果需要在初始化后仍能对url请求进行修改,可使用NSMutableURLRequest,可以修改的项目包括:缓存策略、超时时间、URL对象、主文档地址、头信息、上行内容、请求方法、Cookie

    3、NSURLConnection 

    可以使用同步或异步的方式发送一个请求,两者的结果返回内容不同。

    3.1 同步请求

    + (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;

         是最快捷的方式,但是不能监控内容下载过程。

         返回数据的处理:返回数据封装以NSData,一般将其转换为NSString后,才进行处理。

         响应的处理:NSURLRequest对应的响应的元信息封装在NSURLResponse中。

         NSURLResponse:它包含关于一个URL load的元数据。注意:NSURLResponse对象并不包含实际的url内容。如果想获得一个URL load接收到的数据的更详细的信息,请看NSURLConnection and NSURLConnectionDelegate。

    - (id)initWithURL:(NSURL *)URL MIMEType:(NSString *)MIMEType expectedContentLength:(NSInteger)length textEncodingName:(NSString *)name;
    - (NSURL *)URL;//返回receiver的url
    - (NSString *)MIMEType;//返回receiver的MIMEType
    - (long long)expectedContentLength;
    - (NSString *)textEncodingName;
    - (NSString *)textEncodingName;

         错误的处理:如果请求过程中发生错误,导致请求无法完成,则error对象不为nil。

         NSError:包含许多方法可以描述错误信息,常用的有- (NSString *)localizedDescription;

     

    3.2 异步请求

        不影响当前正在进行的操作,数据分多次按顺序返回

        异步请求步骤:

      1、构造NSURL

      2、生成一个NSURLRequest

      3、构造连接对象(NSURLConnection)

      4、发送请求

      5、使用委托监控数据返回过程

      6、将多次返回的数据连接成同一个数据对象

      7、使用连接后的数据对象

    构造连接:

    - (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately NS_AVAILABLE(10_5, 2_0);
    - (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate;
    + (NSURLConnection*)connectionWithRequest:(NSURLRequest *)request delegate:(id)delegate;

    发送请求:

    - (void)start NS_AVAILABLE(10_5, 2_0);
    - (void)cancel;

    使用委托:

    NSURLConnectionDelegate、NSURLConnectionDataDelegate、NSURLConnectionDownloadDelegate

     [提醒自己:好好看一下NSURLConnection这个类!]

     

     三、总结

    •可以使用NSURL构造一个URL

    •可以使用NSURLRequest构造一个请求

    •可以使用NSURLConnection发送一个请求,并返回数据

    •可以使用NSURLResponse和NSError来监测响应和错误信息

  • 相关阅读:
    angular2
    angular1
    JavaScript随笔1
    鼠标样式
    清除浮动
    css-父标签中的子标签默认位置
    [Leetcode] Decode Ways
    [Java] 利用LinkedHashMap来实现LRU Cache
    LinkedHashMap和HashMap的比较使用(转)
    [Java] java.util.Arrays 中使用的 sort 采用的算法 (转)
  • 原文地址:https://www.cnblogs.com/wyqfighting/p/3271411.html
Copyright © 2011-2022 走看看