AFN 的一些记录

来源:互联网 发布:炒股训练软件 知乎 编辑:程序博客网 时间:2024/06/03 17:26

状态码
status code : 200
说明,网络请求成功, 二进制数据,已经正确传到本地, 数据解析出问题

AFN请求数据格式
请求的数据格式(一般都是 HTTP 二进制数据,RESTful设计风格要求 POST JSON)
请求的数据格式
AFHTTPRequestSerializer HTTP,二进制,默认的
AFJSONRequestSerializer JSON
AFPropertyListRequestSerializer PList

AFN响应数据格式
响应的数据格式(JSON 是使用最广的数据格式,没有之一!)默认就是 JSON,能够自动实现 JSON 的反序列化
响应的数据格式
AFHTTPResponseSerializer 二进制
AFJSONResponseSerializer JSON,默认的
AFXMLParserResponseSerializer XML 解析器
AFXMLDocumentResponseSerializer (Mac OS X) iPhone不能直接使用,需要用GData-XML
AFPropertyListResponseSerializer PList
AFImageResponseSerializer Image,AFN同样提供了异步加载网络图片的功能
但是:不支持 GIF,只有 SDWebImage 支持
AFCompoundResponseSerializer 组合

  • 常见数据格式的小结

    1. 发送二进制数据,返回 JSON
      AFN 的默认格式
      AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];

如果不是默认格式, 要制定mgr的格式
2. 发送二进制数据,返回 XML
1> SAX 解析
mgr.responseSerializer = [AFXMLParserResponseSerializer serializer];
2> DOM 解析(对节点增加或者删除) 二进制数据格式
mgr.responseSerializer = [AFHTTPResponseSerializer serializer];
[[GDataXMLDocument alloc] initWithData:data error:NULL];
3. 发送 JSON 修改请求的数据格式
// 1. 设置请求的格式
mgr.requestSerializer = [AFJSONRequestSerializer serializer];
// 2. 设置响应的格式(如果返回的是纯文本)
mgr.responseSerializer = [AFHTTPResponseSerializer serializer];
4. 其他:Image,用 SDWebImage 居多!

PUt上传
- (void)putUpload {
// 1. url
NSURL *url = [NSURL URLWithString:@”http://localhost/uploads/zzz.mp4“];
// 2. AFN 上传
AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];
// 3. request
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @”PUT”;
// 身份验证
[request setValue:[@”admin:123456” basicAuthString] forHTTPHeaderField:@”Authorization”];
NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@”搞笑视频.mp4” withExtension:nil];
// * upload 上传,需要自己 resume
// * 学习第三方框架的好处:可以发现自己的知识空缺点,跟大牛直接学习!
// iOS 7.0 之后推出的,专门用于跟踪进度的类,可以跟踪进度树
NSProgress *progress = nil;
[[mgr uploadTaskWithRequest:request fromFile:fileURL progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
NSLog(@”%@ %@”, responseObject, response);
}] resume];
// 此处已经获得进度对象 - 监听进度
NSLog(@”%@”, progress);

// KVO监听进度[progress addObserver:self forKeyPath:@"completedUnitCount" options:0 context:nil];

}

// 是所有 KVO 统一调用的一个方法,最好判断一下对象类型
- (void)observeValueForKeyPath:(NSString )keyPath ofObject:(id)object change:(NSDictionary )change context:(void *)context {
// NSLog(@”%@”, object);
// 判断对象是否是 NSProgress 对象
if ([object isKindOfClass:[NSProgress class]]) {
NSProgress *p = object;
NSLog(@”%lld - %lld”, p.completedUnitCount, p.totalUnitCount);
NSLog(@”%@ - %@”, p.localizedDescription, p.localizedAdditionalDescription);
// * 显示百分比
NSLog(@”%f”, p.fractionCompleted);
}
}

====
AFN 上传多个文件

网络 day8 11

AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];// 上传NSDictionary *params = @{@"username": @"da xiagua"};[mgr POST:@"http://localhost/upload/upload-m.php" parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {  //(代理不用管, 默认已经设好)      /**     参数      1. 本地文件 URL     2. name: 负责上传文件的字段名,咨询公司的后端程序员,或者有文档     3. error     */    NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"04.jpg" withExtension:nil];    [formData appendPartWithFileURL:fileURL name:@"userfile[]" error:NULL];    // 上传多个文件    /**     参数     1. 本地文件 URL     2. name: 负责上传文件的字段名,咨询公司的后端程序员,或者有文档     3. fileName: 保存在服务器的文件名     4. mimeType: 告诉服务器上传文件的类型     5. error     */    NSURL *fileURL2 = [[NSBundle mainBundle] URLForResource:@"AppIcon.jpg" withExtension:nil];    [formData appendPartWithFileURL:fileURL2 name:@"userfile[]" fileName:@"001.jpg" mimeType:@"application/octet-stream" error:NULL];} success:^(NSURLSessionDataTask *task, id responseObject) {    NSLog(@"%@", responseObject);} failure:^(NSURLSessionDataTask *task, NSError *error) {    NSLog(@"%@", error);}];
0 0