AFN post的数据编码格式问题
想到写任何关于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的话就不需要自己编码,他内部已经帮你处理好了!
希望大家不要遇见这种问题!
转载请注明出处,谢谢!
转载于:https://www.cnblogs.com/WayneLiu/p/5080666.html
AFN post的数据编码格式问题相关推荐
- ContentType的集中数据编码格式
看完觉得有用,希望大家能多多支持,关注一下,谢谢 当前台页面使用Get或POST方式提交数据时,数据编码格式由请求头的ContentType指定.可以分为以下几种情况ianng: 1.applicat ...
- geoJson——地理数据编码格式
geoJson是一种地理数据编码格式 {"type": "Feature","geometry": {"type": & ...
- RFID识别磁导航AGV行业传感器CK-GL16数据编码格式
RFID识别磁导航AGV行业传感器CK-GL16数据编码格式 CK-GL16是一款面向AGV行业新推出的一款"跨界"传感器,其创造性的把RFID识别和磁条导航功能同时集成到了同一产 ...
- R 语言读写数据编码格式
在使用R语言读取数据或者R代码时,有时候会出现中文乱码的现象.如何才能避免此类乱码问题的出现呢,笔者根据自己在实际数据处理过程中的经验,总结如下: 笔者在Windows系统下,使用R软件进行统计分析相 ...
- 改变mysql的数据编码格式_修改数据库编码格式(转)
MySQL的默认编码是Latin1,不支持中文,要支持中午需要把数据库的默认编码修改为gbk或者utf8. 1.需要以root用户身份登陆才可以查看数据库编码方式(以root用户身份登陆的命令为:&g ...
- 定义mysql字段的编码模式_在 mysql 中 定义 数据库,表,列时,设定的各个的编码格式。...
最近看了一下KIGG框架,发现在用EF + MYSQL数据库时,数据出现了乱码,用工具(Navicat )查看一下表category的结构发现 KIGG 数据库的默认情况是用latin1编码的(DEF ...
- Django10:Ajax介绍/发送数据/SweetAlert
Ajax 异步提交 局部刷新 发送方式 1. 浏览器输入url,按enter get 2.a标签href属性 get 3.form表单 ...
- 怎么调用获取被创建的预制体_Go 语言 Web 编程系列—— 获取用户请求数据(上)...
0.GET/POST 请求数据 在 PHP 中,可以直接通过全局变量 $_GET 和 $_POST 快速获取 GET/POST 请求数据,GET 请求数据主要是 URL 查询字符串中包含的参数,以前面 ...
- 密码学专题 文件编码格式
OpenSSL中虽然使用PEM作为基本的文件编码格式,但是,由于不同的对象其封装的标准格式不太一样,所以经常会导致读者产生迷惑.此外,OpenSSL也支持DER编码和过时的Netscape编码格式(N ...
最新文章
- 矩阵的特征值、特征向量及其代码求解实现
- 计算机科学软件工程专业大学排名,2020软件工程专业大学排名及录取分数汇总(2021理科生参考)...
- linux系统调用open、write、close、read以及stat函数详解
- c语言编程调试找不到路径,VScode 调试C/C++时出现无法打开“X”: 找不到文件(file:///XXXX) 的解决办法...
- HTML学习笔记:实现条纹边框
- 终端怎么进入hadoop_Ubuntu中使用终端运行Hadoop程序
- sharepoint html 编辑器 ,使用 Web 部件自定义页面简介
- 如何通过 MacBook Pro 上的触控栏使用辅助功能?
- 玩水——西沙:在海的远处,水是那么蓝那么清
- matlab三角函数拟合程序,三角函数拟合
- PROXMOX 开源虚拟服务器系统安装及配置
- ADS1110输入阻抗
- 号称最为简明实用的Django上手教程
- Gos —— 搭建基础环境
- 美国访问学者生活之行-公交及考驾照
- iphone二手机在哪里回收比较好(哪里回收的价格最高)
- ThinkPad E450 拆机换电池
- EasyExcel与POI
- MinGW-w64在windows下的离线安装
- C,数组声明、初始化,不初始化会如何?
热门文章
- Tricks with Direct Memory Access in Java
- 如何确定Oracle是32 Bit(位)的还是64 Bit(位)的?
- 看了msn的站点有感
- 金融的财务的一些概念
- university of liverpool writing techniques
- 关于ADB 执行报错问题-db server version (31) doesn't match this client (40); killing...
- 配置vbox fedora虚拟机的VboxGuestAdditions
- 欧拉函数的相关应用 noj欧拉函数求和+noj 最大公约数求和
- xtrabackup增量备份mysql +MHA
- 百度地图同时显示多个路书