美文网首页
使用AFNetworking 3做HTTPS网络请求示例代码

使用AFNetworking 3做HTTPS网络请求示例代码

作者: AnderQZ | 来源:发表于2016-12-29 13:45 被阅读22次

    最近苹果强推HTTPS让人无奈之余,又多了些问题,记录一下,大家可参考,本人菜鸟,有错误的地方还请大神们指正。

    今天说的是HTTPS下,使用AFNetworking 3来做网络请求,要修改两个地方,网络请求很常见,所以简单记录一下。

    AFNetworking做网络请求,就需要先创建会话管理者:

    AFHTTPSessionManager *sessionManage = [AFHTTPSessionManager manager];
    

    然后就是创建URL的参数相关字典

    NSDictionary *parameterDic = @{/*请求参数*/};
    

    最后,就是请求网络数据

    [sessionManage POST:@"https://www.baidu.com" parameters:parameterDic progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"Success!😂 responseClass:%@ -- responseObject: %@", [responseObject class], responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"Fail!😬Error: %@", error);
    }];
    

    常规步骤就是以上那些了,但是HTTPS请求时,你也许会发现以下的问题:

    -1016错误:
    Fail!😬Error: Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/html" UserInfo={com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x60800022ba40>
    
    原因:

    AFNetworking可接受的内容类型不包含“text/html”格式。

    解决方法:

    在AFNetworking文件夹中,找到
    AFURLResponseSerialization.m
    将原来的:

    self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];
    

    改成(其实就是加一个可接受类型"text/html"):

    self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];
    

    很快,你再次运行代码,可能又会出现另外一个错误。

    3840错误:
    Fail!😬Error: Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}
    
    原因:

    大概就是没有设置好吧。🤷‍♂️

    解决方法:

    在创建会话者时,加上下面两行代码:

    sessionManage.requestSerializer = [AFHTTPRequestSerializer serializer];
    sessionManage.responseSerializer = [AFHTTPResponseSerializer serializer];
    

    好了,运行,问题应该解决了吧!🐒

    相关文章

      网友评论

          本文标题:使用AFNetworking 3做HTTPS网络请求示例代码

          本文链接:https://www.haomeiwen.com/subject/bgauvttx.html