AFNetWorking初探之AFHTTPRequestOperation(二)

原创 2015年11月20日 15:40:57

上篇关于AFHTTPRequestOperation的文章中我们说道

AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:requst];这个方法会调用父类的方法进行一些初始化操作下面我们看看他都干了些什么


 AFHTTPRequestOperation本类调用两个方法

1.父类方法 

2.self.responseSerializer = [AFHTTPResponseSerializer serializer]。

AFHTTPRequestOperation父类AFURLConnectionOperation 中调用

1.super 

2.self.lock = [[NSRecursiveLock alloc] init];

  self.lock.name = kAFNetworkingLockName;

  self.runLoopModes = [NSSet setWithObject:NSRunLoopCommonModes];

  self.request = urlRequest;

  self.shouldUseCredentialStorage = YES;  

  self.securityPolicy = [AFSecurityPolicy defaultPolicy]; 

我们按照程序的执行顺序来看  首先或走父类AFURLConnectionOperation的super方法,即到NSOperation当中去执行 这是apple官方的不在细说。然后执行self.lock=.. self.lock.name = ..我们上次说道这是一个初始化锁的操作为保证请求的原子性,self.runLoopModes=.. 我们发现这个属性类型是一个NSSet(不允许重复的)从名字上看是一个loop猜测应该跟请求队列有关,点进去看发现如下解释 跟我们猜测的差不多。  

/**

 The run loop modes in which the operation will run on the network thread. By default, this is a single-member set containing `NSRunLoopCommonModes`.

 */

@property (nonatomic,strong) NSSet *runLoopModes;



接着往下看self.request= ... 简单的赋值操作。把我们定义的nsrequest给自己。接着是self.shouldusercreaden...= yes; 这个属性名翻译过来是用户证书应该储藏,跟证书有关的操作,给的描述如下 翻译一下就是问我们 是否让这个url connedtion 翻阅证书存储处来验证链接。 还说道这个值是NSURLConnectionDelegate中的connectionShouldUseCredentialStorage方法返回的。  

/**

 Whether the URL connection should consult the credential storage for authenticating the connection. `YES` by default.


 This is the value that is returned in the `NSURLConnectionDelegate` method `-connectionShouldUseCredentialStorage:`.

 */

@property (nonatomic,assign) BOOL shouldUseCredentialStorage;


再接着往下是self.securityPolicy = [AFSecurityPolicydefaultPolicy]
 

+ (instancetype)defaultPolicy {
    AFSecurityPolicy *securityPolicy = [[self alloc] init];
    securityPolicy.SSLPinningMode = AFSSLPinningModeNone;

    return securityPolicy;
}
干了什么呢,生成一个默认的 afsecuritypolicy对象,这个对象用来添加跟证书有关的东西,我们知道很多网络请求都是以https开头的这是为了保证我们请求的安全性,这个类给了我们一下说明,可以看出 添加ssl证书等内容。

/**

 `AFSecurityPolicy` evaluates server trust against pinned X.509 certificates and public keys over secure connections.


 Adding pinned SSL certificates to your app helps prevent man-in-the-middle attacks and other vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged to route all communication over an HTTPS connection with SSL pinning configured and enabled.

 */


总算说完了AFURLConnectionOperation 我们终于可以回到AFHTTPRequestOperation了 他的里面初始化了一个东西 AFHTTPResponseSerializer 

+ (instancetype)serializer {
    return [[self alloc] init];
}

- (instancetype)init {
    self = [super init];
    if (!self) {
        return nil;
    }

    self.stringEncoding = NSUTF8StringEncoding;  //一看就知道跟编码有关

    self.acceptableStatusCodes = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(200, 100)];//状态码相关设定 解释如下
    self.acceptableContentTypes = nil;

    return self;
}

可接受的http状态码,没有包含在这个之内的将导致返回错误。


/**

 The acceptable HTTP status codes for responses. When non-`nil`, responses with status codes not contained by the set will result in an error during validation.


 See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

 */

@property (nonatomic,copy, nullable)NSIndexSet *acceptableStatusCodes;


看到这里我们明白在我们上篇关于AFHTTPRequestOperation中说道的setcompel..的block中 op的状态码决定返回错误与否的说法其实是有问题的,正确的判断错误的流程应该是 服务器返回状态码->让AFHTTPRequestOperation当中的NSHTTPURLResponse *response 的这个里面的statusCode等于服务器端的状态码->然后AFHTTPRequestOperation这个类根据response 这里面的状态码与acceptableStatusCodes里面的码对比 如果存在就block到success里面 如果错去就block到 fail里面。


 op.response.statusCode





AFNetWorking初探之AFHTTPRequestOperation

本文机遇afnetworing2.*   3.0有些修改的地方,本人尚未探究。 首先先上代码,不想探究的可以直接复制粘切去使用了 -(void) getDataFromeNet:(NSString *...
  • february29
  • february29
  • 2015年11月19日 15:26
  • 308

AFNetWorking初探之AFHTTPRequestOperation(三)

关于AFHTTPRequestOperation 之前已经说说其使用方法,以及一些固定的包装初始化的操作,今天我们深入到setCompletionBlockWithSuccess看看它到底怎样的去回调...
  • february29
  • february29
  • 2015年11月23日 14:24
  • 244

AFNetworking超时时间设置

AFNetworking的默认超时时间为60s。可以自行设置。 在SD
  • nogodoss
  • nogodoss
  • 2014年05月21日 10:24
  • 30645

小白...

初入软件行业,代码小白一枚...还望各位大牛指点迷津,多谢多谢.
  • taoxiaowu36
  • taoxiaowu36
  • 2016年06月25日 22:25
  • 130

afnetworking设置请求头代码

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString st...
  • shenjuneng
  • shenjuneng
  • 2015年07月15日 12:01
  • 134

AFNetworking 请求头的设置

AFHTTPRequestOperationManager*manager=[AFHTTPRequestOperationManagermanager];manager.securityPolicy=...
  • nadeal
  • nadeal
  • 2015年03月13日 13:49
  • 16298

maven小白

maven小白今天花了不少时间成功创建了一个maven项目,期间遇到些问题,搞到现在,头也是晕晕的 下面便将搭建过程分享下, 参照两位的分享,也是加一些自己遇到的问题,自己写了一个分享,可能有些乱...
  • wang725
  • wang725
  • 2015年11月28日 22:38
  • 244

AFHTTPRequestOperation做文件下载的断点续传

之前自己单独做一个项目的时候第一次接触文件下载的断点续传功能,当时查找了很多博客和资料,由于第一次接触,使用了别人封装的一个工具类来做的,开发过程中发现会有一些问题,因为发生的几率不大,因此没有过多优...
  • qishiai819
  • qishiai819
  • 2016年03月08日 18:20
  • 374

小白进化论

每个人都是从电脑小白进化来的,不过术业有专攻,禀赋也有不同,所以有的人锤炼成了高手,有的人还是小白,只不过多看了几部片子多玩了几个游戏而已。网上炒股和在线棋牌,吸引了岁数大的;幼齿们则专注聊天和网游。...
  • bigpeon
  • bigpeon
  • 2008年01月14日 13:43
  • 709

AFNetworking 2.x 设置header

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.requestSer...
  • Dwarven
  • Dwarven
  • 2014年07月13日 22:45
  • 17960
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:AFNetWorking初探之AFHTTPRequestOperation(二)
举报原因:
原因补充:

(最多只允许输入30个字)