使用AFN 的POST请求出现错误"Error Domain=NSCocoaErrorDomain Code=3840 "决绝方案
来源:互联网 发布:植物精灵mac百度云 编辑:程序博客网 时间:2024/05/14 23:22
使用最新版本的AFN 进行HTTP的网络请求偶尔遇到的问题, 有时候自己就解决了, 也不知道原因, 后来 stackOverFlow上看到一个答案试了一下 可以解决 不过他的都是用C 写的, 简单改了一下 还是使用AFN
代码
/* 主要就是给 请求的过程添加一个安全政策的对象 并使用 */+ (void)POSTWithURL:(NSString *)url withBody:(id)body withBodyStyle:(bodyStyle)bodyStyle withHttpHead:(NSDictionary *)head responseStyle:(responseStyle)style withSuccess:(void (^)(id))success withFail:(void (^)(NSError *))fail { AFSecurityPolicy *securityPolicy = [[AFSecurityPolicy alloc] init]; [securityPolicy setAllowInvalidCertificates:YES]; NSString *url_string = [NSString stringWithString:url]; /* 创建http请求管理者 */ AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; /* 处理body类型 */ switch (bodyStyle) { case stringStyle: { break; } case JSONStyle: { break; } } /* 添加请求头 */ if (head) { for (NSString *key in head) { [manager.requestSerializer setValue:head[key] forHTTPHeaderField:key]; } } /* 判断返回数据类型 */ switch (style) { case DATA: { manager.responseSerializer = [AFHTTPResponseSerializer serializer]; break; } case JSON: { manager.responseSerializer = [AFJSONResponseSerializer serializer]; break; } case XML: { manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; break; } default: break; } /* 设置请求接受的数据类型 */ [manager setSecurityPolicy:securityPolicy]; manager.responseSerializer = [AFHTTPResponseSerializer serializer];// [manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html",@"text/plain", nil]]; //本地缓存设置,沙盒路径设置 NSArray *path = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES); NSString *pathString = path.lastObject; NSString *pathLast =[NSString stringWithFormat:@"/Caches/com.hackemist.post.default/%lu.text", (unsigned long)[url_string hash]]; //创建字符串文件存储路径 NSString *PathName =[pathString stringByAppendingString:pathLast]; //第一次进入判断有没有文件夹,如果没有就创建一个 NSString * textPath = [pathString stringByAppendingFormat:@"/Caches/com.hackemist.post.default"]; if (![[NSFileManager defaultManager]fileExistsAtPath:textPath]) { [[NSFileManager defaultManager]createDirectoryAtPath:textPath withIntermediateDirectories:YES attributes:nil error:nil]; } //设BOOL值 判断解析后的数据是数组还是字典 __block BOOL isClass = NO; /* POST请求 */ [manager POST:url parameters:body constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { } progress:^(NSProgress * _Nonnull uploadProgress) { } success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { if ([responseObject isKindOfClass:[NSArray class]]) { isClass = YES; } else{ isClass = NO; } [responseObject writeToFile:PathName atomically:YES]; success(responseObject); } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSString * cachePath = PathName; if ([[NSFileManager defaultManager] fileExistsAtPath:cachePath]) { //从本地读缓存文件 id responseObject = nil; if (isClass) { responseObject = [NSMutableArray arrayWithContentsOfFile:cachePath]; } else { responseObject = [NSMutableDictionary dictionaryWithContentsOfFile:cachePath]; } success(responseObject); } }];}
本篇和之前写过的关于AFN封装的博客挂钩 如果不懂可以参考一下
http://blog.csdn.net/qq_30402119/article/details/49822513主要就是加下面的四句
/* 设置安全政策对象 */ AFSecurityPolicy *securityPolicy = [[AFSecurityPolicy alloc] init]; [securityPolicy setAllowInvalidCertificates:YES]; /* 使用 */ [manager setSecurityPolicy:securityPolicy]; manager.responseSerializer = [AFHTTPResponseSerializer serializer];
0 0
- 使用AFN 的POST请求出现错误"Error Domain=NSCocoaErrorDomain Code=3840 "决绝方案
- 解决AFN的post请求错误:Error Domain=NSCocoaErrorDomain Code=3840
- iOS开发Post请求错误:Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or ...
- AFNetworking,处理返回数据时出现Error Domain=NSCocoaErrorDomain Code=3840 错误
- Error Domain=NSCocoaErrorDomain Code=3840
- Error Domain=NSCocoaErrorDomain Code
- POST请求报错:Error Domain=NSCocoaErrorDomain Code=3840 "No string key for value in object around charact
- AFNetwork 2.0在请求时报错 Error Domain=NSCocoaErrorDomain Code=3840
- Error Domain=NSCocoaErrorDomain Code=3000
- Error Domain=NSCocoaErrorDomain Code=3840解决方法
- AFNetworking Error Domain=NSCocoaErrorDomain Code=3840
- Error Domain=NSCocoaErrorDomain Code=3840Json解析失败
- 错误:Error Domain=NSCocoaErrorDomain Code=3840 "Garbage at end." UserInfo={NSDebugDescription=Garbage
- ASIHTTP请求的数据解析出错问题Error Domain=NSCocoaErrorDomain Code=3840 "Unable to convert data to string around
- Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)"
- Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)"
- iOS-Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be complet
- Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. 错误的处理方法
- android开发使用的工具类
- c语言各类型转换
- Linux下Vpsmate面板安装和卸载教程
- Javascript 函数参数名妙用(区分函数参数名称)
- 个人笔记
- 使用AFN 的POST请求出现错误"Error Domain=NSCocoaErrorDomain Code=3840 "决绝方案
- question_023-JAVA之Collection和Collections
- MVC学习笔记1---MVC的理解
- 导航栏上文字颜色的设置
- 全排列算法(java实现)
- MapReduce程序——wordCount
- Docker swarm cluster 搭建
- NSMutableDictionary改良,默认有key和value
- TCP协议三次握手四次挥手过程