ios AFNetworking3.0 请求网络数据
来源:互联网 发布:万税 知乎 编辑:程序博客网 时间:2024/06/05 05:42
要求:用AFNetworking 下载一张图片展示出来,或者请求json数据
pod一个最新的AFNetworking,然后想去download一张图片
然后发现下载不下来
错误一:
xcode控制台打印如下错误:
NSErrorFailingURLKey = "https://raw.githubusercontent.com/robinson911/robinson911.github.io/master/img/contact-bg.jpg";
NSLocalizedDescription = "Request failed: unacceptable content-type: image/jpeg";
错误分析:
content-type:是请求(request)/或者返回(response)数据的格式类型
从上边的提示可以看出需要设置的是请求content-type类型。
解决:设置一下数据格式类型
[manager.responseSerializersetAcceptableContentTypes:[NSSetsetWithObjects:@"image/png",@"image/jpeg",nil]];
重新rebuild,发现图片还是加载不出来
xcode控制台打印如下错误:
NSDebugDescription = "JSON text did not start with array or object and option to allow fragments not set.";
}----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.}
然后看源码发现:
在默认情况下,afnetworking网络请求都是以json的数据格式返回数据,因此,客户端也会以json为默认格式,如果返回的数据为非json标准格式,则会出现上述错误。
只需要在发送请求前加入:manager.responseSerializer = [AFHTTPResponseSerializer serializer]
便可以解决这个问题了。
然后重新rebuild,发现图片加载正常了
编译通过请求到图片的源码如下:
- (void)requestNetData:(NSString*)url{ NSSet *ljSet = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", @"text/plain",@"application/xml",@"text/xml",@"image/png",@"image/jpeg",nil]; AFHTTPSessionManager *manager =[AFHTTPSessionManager manager]; manager.requestSerializer = [AFHTTPRequestSerializer serializer]; //manager.requestSerializer = [AFJSONRequestSerializer serializer]; //manager.responseSerializer = [AFJSONResponseSerializer serializer]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; [manager.responseSerializer setAcceptableContentTypes:ljSet]; [manager GET:url parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) { CHDebugLog(@"totalUnitCount:%lld---completedUnitCount:%lld",downloadProgress.totalUnitCount,downloadProgress.completedUnitCount); } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { //CHDebugLog(@"%@",responseObject); if ([url rangeOfString:@"png"].location != NSNotFound || [url rangeOfString:@"jpeg"].location != NSNotFound || [url rangeOfString:@"jpg"].location != NSNotFound) { dispatchToMain(^{ UIImage *image = [UIImage imageWithData:responseObject]; self.LJImageView.image = image; }); } else if ([url rangeOfString:@"json"].location != NSNotFound) { /*NSError *error = nil; 1.需要将data转化为json NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:&error]; CHDebugLog(@"print json data----%@",dict); */ //2.初始化为 manager.responseSerializer = [AFJSONResponseSerializer serializer]; 来帮助你接收json数据 CHDebugLog(@"print json data----%@",responseObject); } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { CHDebugLog(@"%@----%@",error.userInfo,error); }];}
- ios AFNetworking3.0 请求网络数据
- ios中afnetworking3.0网络请求
- AFNetworking3.0网络请求
- IOS AFNetworking3.0 SDImage 网络请求和图片加载
- AFnetworking3.0的网络请求
- 用AFNetworking3.0封装网络请求
- 用AFNetworking3.0封装网络请求
- AFNetworking3.0 如何取消单个网络请求
- 网络请求-AFNetworking3.0使用简介
- 用AFNetworking3.0封装网络请求
- 使用AFNetworking3.0封装网络请求
- iOS 开发 AFNetworking3.0源码解析(一:结构图/网络请求三次封装/上传下载/网络监测)
- AFNetworking3.0使用 ,Post数据请求
- iOS --- AFNetworking3.0网络请求方法封装(自带缓存功能)
- AFNetworking3.0 POST请求
- AFNetworking3.0网络请求方法封装(自带缓存功能)
- AFNetworking3.0网络请求方法封装(自带缓存功能)
- AFNetworking3.0网络请求方法封装(自带缓存功能)
- 手机QQ内置网页分享API
- PHP对文件的一些操作
- 一款如此有趣的微型外卖自动接单打印机 对对机评测
- jedis:连接池(JedisPool)使用示例
- C++学习笔记【第二部分第八章:IO类】
- ios AFNetworking3.0 请求网络数据
- java j2EE
- mysql行锁
- 游百望山(记于17.09.05)
- Java反射机制
- Android进程优先级
- JVM内存区域-栈的理解
- itertoors
- AEC、AGC、ANS在视音频会议中的作用?