iOS网络-AFNetworking序列化

AFN它内部默认把服务器响应的数据当做json来进行解析,所以如果服务器返回给我的不是JSON数据那么请求报错,这个时候需要设置AFN对响应信息的解析方式。AFN提供了三种解析响应信息的方式,分别是:

AFJSONResponseSerializer---------JSON 默认模式

AFXMLParserResponseSerializer---XML
AFHTTPResponseSerializer---------二进制响应数据

还有一种情况就是服务器返回给我们的数据格式不太一致(开发者工具Content-Type:text/xml),那么这种情况也有可能请求不成功。解决方法:

直接在源代码中修改,添加相应的Content-Type
拿到这个属性,添加到它的集合中

AFJSONResponseSerializer模式示例代码:

-(void)json
{
    //1.创建会话管理者
    AFHTTPSessionManager* manager =  [AFHTTPSessionManager manager];

    NSDictionary *dictM = @{
                            @"username":@"520it",
                            @"pwd":@"520it",
                            @"type":@"JSON"
                            };

    //2.发送GET
    [manager GET:@"http://120.25.226.186:32812/login" parameters:dictM progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"成功--%@",responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"失败--%@",error);
    }];
}

AFXMLParserResponseSerializer模式示例代码:

-(void)xml
{
    //1.创建会话管理者
    AFHTTPSessionManager* manager =  [AFHTTPSessionManager manager];

    NSDictionary *dictM = @{
                            @"type":@"XML"
                            };

     manager.responseSerializer = [AFXMLParserResponseSerializer serializer];

    //2.发送GET
    [manager GET:@"http://120.25.226.186:32812/video" parameters:dictM progress:nil success:^(NSURLSessionDataTask * _Nonnull task, NSXMLParser *parser) {

        //设置代理
        parser.delegate = self;

        //开始解析
        [parser parse];

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"失败--%@",error);
    }];

}
#pragma mark - NSXMLParserDelegate
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
{
    NSLog(@"%@---%@",elementName,attributeDict);
}

AFHTTPResponseSerializer模式示例代码:

-(void)http
{
    //1.创建会话管理者
    AFHTTPSessionManager* manager =  [AFHTTPSessionManager manager];

    NSString *urlStr = @"http://img4q.duitang.com/uploads/item/201411/21/20141121231731_PkXNk.jpeg";

    //调整AFN的解析方式
//    manager.responseSerializer = [AFJSONRequestSerializer serializer];//默认
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    //2.发送GET
    [manager GET:urlStr parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"成功--%@",[responseObject class]);
        NSLog(@"%@",[NSThread currentThread]);
        self.imageView.image = [UIImage imageWithData:responseObject];

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"失败--%@",error);
    }];
}
-(void)http2
{
    //1.创建会话管理者
    AFHTTPSessionManager* manager =  [AFHTTPSessionManager manager];

    NSString *urlStr = @"http://www.baidu.com";

    //调整AFN的解析方式 如果报错(text/html是在报错里面提供的),百分之七八十都是因为缺少这俩句代码原因
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];    //Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable content-type: text/html",缺少上面代码报的错误
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];    //Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set.",缺少上面代码报的错误

    //2.发送GET
    [manager GET:urlStr parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"成功--%@",[responseObject class]);

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"失败--%@",error);
    }];
}
时间: 2024-10-10 01:53:24

iOS网络-AFNetworking序列化的相关文章

iOS网络-AFNetworking检测网络状态

可以使用AFN框架中的AFNetworkReachabilityManager来监听网络状态的改变,也可以利用苹果提供的Reachability来监听.建议在开发中直接使用AFN框架处理. 示例代码如下: -(void)afn { //1.创建网络状态监测管理者 AFNetworkReachabilityManager *manger = [AFNetworkReachabilityManager sharedManager]; //2.监听改变 [manger setReachabilityS

iOS网络-AFNetworking基本使用,文件下载,上传

发送GET请求 -(void)get { //1.创建会话管理者 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; NSDictionary *dictM = @{ @"username":@"520it", @"pwd":@"520it", @"type":@"JSON" }; //2.发送请求 /* 第一个

iOS网络编程(7) 第三方开源库-----&gt;AFNetworking

AFNetworking是一个为 iOS 和 Mac OSX 制作的令人愉快的网络库,它建立在URL 装载系统框架的顶层,内置在Cocoa里,扩展了强有力的高级网络抽象.它的模块架构被良好的设计,拥有丰富的功能,因此,使用起来,必定赏心悦目. @原文链接https://github.com/AFNetworking/AFNetworking,我在此基础上了点配置修改 @介绍 1.支持HTTP请求和基于REST的网络服务(包括GET.POST. PUT.DELETE等) 2.支持ARC 3.要求i

IOS网络访问之使用AFNetworking

IOS网络访问之使用AFNetworking AFNetworking是IOS上常用的第三方网络访问库,我们可以在github上下载它,同时github上有它详细的使用说明,最新的AFNetworing2.0与1.0有很大的变化,这里仅对2.0常用的使用方法进行总结 基于NSURLConnection的API 提交GET请求 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [man

对比iOS网络组件:AFNetworking VS ASIHTTPRequest

对比iOS网络组件:AFNetworking VS ASIHTTPRequest 在开发iOS应用过程中,如何高效的与服务端API进行数据交换,是一个常见问题.一般开发者都会选择一个第三方的网络组件作为服务,以提高开发效率和稳定性.这些组件把复杂的网络底层操作封装成友好的类和方法,并且加入异常处理等. 那么,大家最常用的组件是什么?这些组件是如何提升开发效率和稳定性的?哪一款组件适合自己,是 AFNetworking(AFN)还是 ASIHTTPRequest(ASI)?几乎每一个iOS互联网应

iOS开发之网络-AFNetworking的使用

iOS开发之网络-AFNetworking 的使用 一.简介 AFNetworking 拥有良好的架构.丰富的API,以及模块化构建方式,使得使用起来非常轻松.它能够更好的处理向 Web 站点的请求,像处理 Session.Cookie 等问题的时候,使用 AFNetworking 是更好的选择. 通过 GitHub获取 AFNetworking. 二.使用步骤 ①

IOS网络访问之使用AFNetworking&lt;2&gt;

IOS网络访问之使用AFNetworking AFNetworking是IOS上常用的第三方网络访问库,我们可以在github上下载它,同时github上有它详细的使用说明,最新的AFNetworing2.0与1.0有很大的变化,这里仅对2.0常用的使用方法进行总结 基于NSURLConnection的API 提交GET请求 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; [man

对比iOS网络组件:AFNetworking VS ASIHTTPRequest(转载)

在开发iOS应用过程中,如何高效的与服务端API进行数据交换,是一个常见问题.一般开发者都会选择一个第三方的网络组件作为服务,以提高开发效率和稳定性.这些组件把复杂的网络底层操作封装成友好的类和方法,并且加入异常处理等. 那么,大家最常用的组件是什么?这些组件是如何提升开发效率和稳定性的?哪一款组件适合自己,是 AFNetworking(AFN)还是 ASIHTTPRequest(ASI)?几乎每一个iOS互联网应用开发者都会面对这样的选择题,要从这两个最常用的组件里选出一个好的还真不是那么容易

IOS -AFNetworking 简介及使用

一AFNetworking简介 AFNetworking是一个在IOS开发中使用非常多网络开源库,适用于iOS以及Mac OS X. 它构建于在(apple ios开发文档)NSURLConnection, NSOperation,以及其他熟悉的Foundation技术之上.它拥有良好的架构,丰富的api,以及模块化构建方式,使得使用起来非常轻松. AFURLConnectionOperation:继承自 NSOperation 实现了NSURLConnection 的代理方法. AFHTTPR