一、早前的几个网络框架
1、ASI框架: HTTP终结者.很牛, 但是有BUG, 已经停止更新.
2、MKNetworkKit (印度人写的).
3、AFN一直还在更新.

AFNetworking的出现:MAC/iOS设计的一套网络框架.(为了简化网络操作)

*AFN专注与网络数据传输,以及网络中多线程的处理.

二、AFNetworking的使用

1、AFN特性 :
*登录传参数时,传递字典即可.(键名为参数名,键值为参数值).
*自动到子线程中执行,执行完后返回主线程.
*返回的结果自动序列化为NSDictionary.
 
2、使用AFN注意 :
*AFHTTPRequestOperationManager封装了通过HTTP协议与Web应用程序进行通讯的常用方法.(这个实例化的时候不是单例, 因为没有shared字)
*包括创建请求/响应序列化/网络监控/数据安全.
*方法等都是以AF开头的.
3、AFN能做的 (网络中的都涵盖了):
*GET/POST/PUT/DELETE/HEAD请求.
*JSON数据解析/Plist数据解析.(不支持XML数据解析)
*POSTJSON.
*上传/下载.
4、使用步骤 : (可参考说明文档)
1.首先需要实例化一个请求管理器AFHTTPRequestOperationManager.
2.设置请求的数据格式:默认是二进制.(可改)
*AFHTTPRequestSerializer(二进制)
*AFJSONRequestSerializer(JSON)
*AFPropertyListRequestSerializer(Plist)
3.设置响应的数据格式:默认是JSON.(可改)
*AFHTTPResponseSerializer(二进制)
*AFJSONResponseSerializer(JSON)
*AFPropertyListResponseSerializer(Plist)
*AFXMLParserResponseSerializer(XML)
*AFImageResponseSerializer(Image)
*AFCompoundResponseSerializer(组合的)
4.如果响应者的MIMEType不正确,就要修改acceptableContentTypes.
5.调用方法,发送响应的请求(GET/POST...).

关于修改AFN源码:通常序列化时做对text/plan等的支持时,可以一劳永逸的修改源代码,在acceptableContentTypes中修改即可。

AFN进行GET、POST登录:

  1. #pragma mark - get/post登录
  2. - (void)getLogin {
  3. //1.管理器
  4. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  5. //2.设置登录参数
  6. NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" };
  7. //3.请求
  8. [manager GET:@"http://localhost/login.php" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {
  9. NSLog(@"GET --> %@, %@", responseObject, [NSThread currentThread]); //自动返回主线程
  10. } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
  11. NSLog(@"%@", error);
  12. }];
  13. }
  14. /**
  15. *  和上面的GET用法完全一样, 只有一个POST参数不一样
  16. */
  17. - (void)postLogin {
  18. //1.管理器
  19. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  20. //2.设置登录参数
  21. NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" };
  22. //3.请求
  23. [manager POST:@"http://localhost/login.php" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {
  24. NSLog(@"POST --> %@, %@", responseObject, [NSThread currentThread]); //自动返回主线程
  25. } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
  26. NSLog(@"%@", error);
  27. }];
  28. }

AFN进行网络数据解析,获取Plist,JSON,XMLAFN不支持自动解析XML,有专门的框架去做,如SAX,PULL,KissXML等)

  1. #pragma mark - get 数据解析
  2. - (void)getJSON {
  3. //1.请求管理器
  4. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  5. //2.发起请求
  6. [manager GET:@"http://localhost/videos.json" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {
  7. NSLog(@"%@", responseObject);
  8. } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
  9. NSLog(@"%@", error);
  10. }];
  11. }
  12. /**
  13. *  不支持XML数据解析
  14. */
  15. - (void)getXML {
  16. //1.管理器
  17. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  18. //2.设置返回数据类型
  19. manager.responseSerializer = [AFXMLParserResponseSerializer serializer]; //先实例化一下
  20. //3.发起请求
  21. [manager GET:@"http://localhost/videos.xml" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {
  22. NSLog(@"%@", responseObject);
  23. } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
  24. NSLog(@"%@", error);
  25. }];
  26. }
  27. - (void)getPlist {
  28. //1.管理器
  29. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  30. //2.设置response类型
  31. manager.responseSerializer = [AFPropertyListResponseSerializer serializer]; //是Response, 别写成request了. 修改为plist类型.
  32. manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; //这个可以直接往框架里面修改.
  33. //3.请求
  34. [manager GET:@"http://localhost/videos.plist" parameters:nil success: ^(AFHTTPRequestOperation *operation, id responseObject) {
  35. NSLog(@"%@", responseObject);
  36. } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
  37. NSLog(@"%@", error);
  38. }];
  39. }

用AFN来POST JSON数据,上传、下载等。(上传、下载主页说明上有https://github.com/AFNetworking/AFNetworking

    1. #pragma mark - post json数据与上传文件等
    2. - (void)postJSON {
    3. //1.管理器
    4. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    5. //2.设定类型. (这里要设置request-response的类型)
    6. manager.requestSerializer = [AFJSONRequestSerializer serializer];
    7. manager.responseSerializer = [AFHTTPResponseSerializer serializer]; //这个决定了下面responseObject返回的类型
    8. //    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    9. //  manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];
    10. //2.设置登录参数
    11. NSDictionary *dict = @{ @"username":@"xn", @"password":@"123" };
    12. //3.发送请求
    13. [manager POST:@"http://localhost/postjson.php" parameters:dict success: ^(AFHTTPRequestOperation *operation, id responseObject) {
    14. //      NSLog(@"postjson--> %@", responseObject);  //这样显示JSON的话需要设置text/plain
    15. NSString *result = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
    16. NSLog(@"%@",result);
    17. } failure: ^(AFHTTPRequestOperation *operation, NSError *error) {
    18. NSLog(@"%@", error);
    19. }];
    20. }

iOS 网络操作与AFNetworking的更多相关文章

  1. 对比iOS网络组件:AFNetworking VS ASIHTTPRequest

    对比iOS网络组件:AFNetworking VS ASIHTTPRequest 作者 高嘉峻 发布于 2013年2月28日 | 7 讨论 分享到:微博微信FacebookTwitter有道云笔记邮件 ...

  2. 【iOS】网络操作与AFNetworking

    众所周知.苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐.操作起来非常不方便. 不仅要做区分各种请求设置各种不同的參数,并且还要常常在多线程里操作,同一时候还要对请求与返回的 ...

  3. IOS网络请求框架AFNetworking和ASIHttpRequest对比

    ASI基于CFNetwork框架开发,而AFN基于NSURL. ASI更底层,请求使用创建CFHTTPMessageRef进行,使用NSOperationQueue进行管理,ASIHTTPReques ...

  4. 网络操作与AFNetworking

    众所周知,苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐.操作起来很不方便.不仅要做区分各种请求设置各种不同的参数,而且还要经常在多线程里操作,同时还要对请求与返回的数据做各 ...

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

    在开发iOS应用过程中,如何高效的与服务端API进行数据交换,是一个常见问题.一般开发者都会选择一个第三方的网络组件作为服务,以提高开发效率和稳定性.这些组件把复杂的网络底层操作封装成友好的类和方法, ...

  6. iOS网络开发之AFNetworking

    概述 AFNetworking是一个非常受欢迎的轻量级的iOS.Mac OS X网络通信类库.它建立在NSURLConnection.NSOperation以及其技术的基础上,有着精心设计的模块结构和 ...

  7. iOS 网络编程:AFNetworking

    1 简介 1.1 概念 AFNetworking网络框架并不是IOS自带的框架,而是第三方的开源框架.它是对NSURLConnection和NSURLSession API的封装,但是目前AFNetw ...

  8. IOS网络请求之AFNetWorking 3.x 使用

    前言: 计划把公司的网络请求与业务解耦,所以想着学习一下网络请求,最近学习了NSURLSession,今天来学习一下基于NSURLSession封装的优秀开源框架AFNetWorking 3.x,之前 ...

  9. iOS开发网络数据之AFNetworking使用

    iOS开发网络数据之AFNetworking使用 如何选择AFNetworking版本 首先得下载AFNetworking库文件,下载时得首先弄清楚,你将要开发的软件兼容的最低版本是多少.AFNetw ...

随机推荐

  1. libcurl+OpenSSL 库分享

    首先,我要感谢这两个博客给我的帮助: https://www.cnblogs.com/findumars/p/7496122.html https://blog.csdn.net/yannanxiu/ ...

  2. centos 下修改mysql 默认字符集

    解决办法: CentOS 7下修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家需要用到的字符,是国际编码. 具体操作: 1.进入MySQL控制台 mysql  -u root - ...

  3. shell编程小技巧(命令篇)

    本文主要介绍shell编程中一些好用的命令或者一些常见命令但比较少用却又好用的参数,目的是希望可以提高编码效率. df命令 常用命令 df / df -k / df -m / df -H / df - ...

  4. Todolist组件

    一.什么是组件? 组件是可复用的 Vue 实例.是页面上的某一部分. 大型项目可以拆分成很多小组件. 二.如何定义(创建)组件? 全局组件:通过Vue.component方法创建的组件是全局组件.其中 ...

  5. unity3d API知识点随记

    1.transform.translate是增加transform面板相应的数值x,y,z是以本地坐标系为方向:transform.transformdirection是以世界坐标系为方向,可以去测试 ...

  6. myEclips 中的项目复制重命名

    现在有个项目Pj ,要复制一个Pu 一,退出 myEclips. 二,找到Pj备份一份到其他目录. 三,进入myEclips,F2修改项目名Pj至Pu. 四,将备份拷贝回原目录. 五,将Pj重新引进m ...

  7. redis滴

    Redis 可用于内存存储,也可以基于持久化存储 Key-Value的形式存储. Redis的数据结构 1.字符串(string) 2.字符串列表(lists) 3.字符串集合(sets) 4.有序字 ...

  8. python scrapy 插入数据库的操作

    需要安装这个 pymysql 写法还是很简单的 # -*- coding: utf-8 -*- # Define your item pipelines here # # Don't forget t ...

  9. linux下面设置密码失效参考

    chage -E 2005-12-31 user1 设置用户口令的失效期限

  10. 05_ssm基础(四)之Spring基础二

    24.spring配置dbcp并完成CRUD操作 1.准备jar包 2.编辑Product模型 package com.day02.ssm.spring.model; public class Pro ...