想到写任何关于AFN的东西其实我是拒绝的,因为自己这也是第一次用,毕竟AFN现在是最为流行的网络框架了,害怕自己理解的有误,所以不敢造次!

先在这里大致讲解一下过程吧,后期发现了再更正(主要是想让看官避免遇到同类的问题),可能原理说得并不正确,所以希望大家直接看解决办法

在这次使用的过程中,就遇到了编码格式问题,后来经过抓包(自己客户端还没用过charles,说起来也是惭愧,这篇博客后就要滚去学习一下了),发现是自己客户端的编码格式的问题

具体什么问题,我下面说:

 key point:

大家都知道AFN默认post接受的参数是id类型的,而且他内部已经实现了参数的编码,仅仅是对参数,如果将url整体传入的话需要自己编码

如果你穿的是nsmutabledictionary的话就不需要自己编码,他内部已经帮你处理好了!

问题其实就是出在这里

后台(接口文档)要求我们传的格式是类似于:

tartdate=2015-01-01&enddate=2015-11-01&crdNo=6210888100208023&identityNo=510703198901062430&pageNum=1&trcode=20003&channelflag=1

这种格式的post参数(真是*了dog了),而且加密方式是也很奇葩,而且而且他返回回来的是json,发过去的不是,也是奇葩!这里就不说了

  • 一.没办法,我就只能把以前的nsdictionary改成nsstring

见下图(我简单的封装的AFN):

后来那边服务器打开过后,我们进行对接,发现总是返回我们数据签名不合法!

但是我和安卓组检查了加密方式和最终的加密结果进行一一比对也还是没有发现问题,于是大boss(不是搞iOS的)就说他看一看,最后他也说没发现加密有什么问题(安卓组已经通了),

  • 二.于是怀疑是不是post的编码格式有问题,原先我发送请求的代码如下:

  • 三.后来尝试更改为:

也还是报错,于是网上爬文,也尝试了设置其他的一些请求头,还是没有效果

于是大boss说只有抓包才能看出问题!抓包就抓包吧,但是抓出来的结果和安卓组的一样!

咦!不对,post出去的数据不对啊(抱歉,当时没有截图),你传出去的编码格式不对啊,

本来应该类似于:

  tartdate=2015-01-01&enddate=2015-11-01&crdNo=6210888100208023&identityNo=510703198901062430&pageNum=1&trcode=20003&channelflag=1

  &sigh=**********  这种格式的

但是实际上是(网上随便测试的):

  https://www.google.co.jp/?gfe_rd=cr&ei=ey9lVsLPJcfD8Aev6a74Bw&gws_rd=ssl#q=%E4%BD%A0%E5%A5%BD++%E4%B8%AD%E5%9B%BD

四.就是说传出去的时候AFN自动把&给我们进行url编码了,但是实际上我们是不需要他给我们进行编码的

  所以又爬文,又是试方法,发现还是没用!于是大boss就说他也不知道为什么了,按常理这么成熟的框架应该会有这方面的解决方案的啊,他就叫我再看看,如果还是不行,就叫我换ASI

  OMG,老大,这不是开玩笑的吧,换框架你知道有多痛苦?而且基本上我这个都写好了,现在叫我改,岂不是要我命?  而且你还说第二天要发布测试版(发布个*啊)!

  我实在是不想改框架,于是就拿安卓代码来看,最后发现他们竟然是用的map(就是oc的字典),不是说好的不是字典,是字符串吗? 你们原来不是拼接的post参数嘛?

  什么时候改的,为什么不告诉我你们换了,你们还就在我的座位旁边啊啊啊啊啊啊…

好吧,崩溃心情可想而知

五.于是我就做了最后的尝试,把接受参数换成NSDictionary

六.传过去的格式:

然后就TM成功了!

我想说明的其实就是上面那句话:

AFN内部已经实现了参数的编码,仅仅是对参数,如果将url整体传入的话需要自己编码

如果你传的是NSMutableDictionary的话就不需要自己编码,他内部已经帮你处理好了!

希望大家不要遇见这种问题!

转载请注明出处,谢谢!

AFN post的数据编码格式问题的更多相关文章

  1. Content-Type的几种常用数据编码格式

    Content-Type,内容类型,一般是指网页中存在的Content-Type,ContentType属性指定请求和响应的HTTP内容类型.如果未指定 ContentType,默认为text/htm ...

  2. Content-Type:几种常用数据编码格式

    Content-Type: 用于定义用户的浏览器或相关设备如何显示将要加载的数据,或者如何处理将要加载的数据. 内容类型,一般指网页中存在的Content-Type,Content-Type属性指定请 ...

  3. 160504、springmvc返回json数据编码格式设定

    <!-- 启动注解驱动的Spring MVC功能,注册请求url和注解POJO类方法的映射 --> <bean class="org.springframework.web ...

  4. Django中数据传输编码格式、ajax发送json数据、ajax发送文件、django序列化组件、ajax结合sweetalert做二次弹窗、批量增加数据

    前后端传输数据的编码格式(contentType) 提交post请求的两种方式: form表单 ajax请求 前后端传输数据的编码格式 urlencoded formdata(form表单里的) ja ...

  5. AFN 二次封装

    #import "YQDataManager.h" #import <YYModel/YYModel.h> #pragma mark - 数据model基类 @impl ...

  6. mysql编码格式设置

    两个地方能影响到mysql的编码格式 ①.[mysql]下default-character-set=GBK//指的是客户端输入的内容的编码(GBK只是支持中英文)②.[mysqld]下# The d ...

  7. AFN 处理网络哪些事(轻松掌握AFN网络顶级框架)

    AFN 一.什么是AFN 全称是AFNetworking,是对NSURLConnection的一层封装 虽然运行效率没有ASI高,但是使用比ASI简单 在iOS开发中,使用比较广泛 AFN的githu ...

  8. iOS开发——网络篇——NSURLSession,下载、上传代理方法,利用NSURLSession断点下载,AFN基本使用,网络检测,NSURLConnection补充

    一.NSURLConnection补充 前面提到的NSURLConnection有些知识点需要补充 NSURLConnectionDataDelegate的代理方法有一下几个 - (void)conn ...

  9. IOS - AFN

    #import "ViewController.h"#import "AFNetworking.h"#import "SSZipArchive.h&q ...

随机推荐

  1. python实现王者荣耀英图片收集

    一个python写的小爬虫项目,爬虫相关的很容易写,关键是怎么找到爬取图片的位置. 图片位置分析 hero_list_url = 'http://pvp.qq.com/web201605/js/her ...

  2. Jmeter4.0----正则表达式提取器(12)

    1.说明 有时候需要将前一个请求返回的数据作为下一个请求的参数时,我们就需要正则表达式提取器.使用正则表达式提取器去提取我们想要的部分再传入后面的请求中. (之前看了一篇不错的博客,可以参考学习 ht ...

  3. Python 魔术方法及调用方式

    魔术方法 调用方式 解释 __new__(cls [,...]) instance = MyClass(arg1, arg2) __new__ 在创建实例的时候被调用 __init__(self [, ...

  4. (转)Linux: dirname、basename命令详解

    Linux: dirname.basename命令详解 原文:http://blog.sina.com.cn/s/blog_3f63916f010143vo.html 一.dirname指令 1.功能 ...

  5. DEDE修改注册邮箱时一起修改UCenter中用户邮箱的问题

    最近在做一个项目,就是在账号安全栏目中加一个修改邮箱并验证的功能,这个功能并不复杂,可以参照用户注册时的邮箱验证来实现. 就是当用户更改邮箱并提交之后,发一封包含一个链接的邮件到用户的新邮箱中,当用户 ...

  6. 使用WinSCP上传文件到linux系统

    1.安装WinSCP 2.新建脚本test.txt option confirm off open username:password@host put C:\test\a.zip /home/tes ...

  7. 极飞P20农业无人机多机协同作业飞行

                      来自为知笔记(Wiz)

  8. 做一个vue模态弹出框如何

    运用的知识点包括: 路由的配置 插槽 vue的过渡动画 路由重定向 router/index.js里面配置路由 import Vue from 'vue' import Router from 'vu ...

  9. eCharts图表(polar极坐标图)

    极坐标图 HTML: <div id="eChart"></div> css: #eChart{ width:500px; height:500px; } ...

  10. Cocos2d-x v3.1 安装图文教程(二)

       Cocos2d-x v3.1 安装图文教程(二) 如果我们需要在Android平台上运行就必须安装android的SDK,如果我们只想在window上运行就只需要安装Cocos2d-x就行了.当 ...