AFNetworking3.0 Post JSON数据
使用AFNetworking3.0后网络请求由原来的AFHTTPRequestOperationManager变为AFHTTPSessionManager。一般的Post请求变成了这样:
NSMutableDictionary *params = [NSMutableDictionary dictionary];
params[@"phoneNumber"] = @"18000000000";
params[@"password"] = @"123";
AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
[session POST:@"" parameters:@"" progress:params success:nil failure:nil];
最近后台要求我们提交post请求使用JSON格式,如{"password":"123","phoneNumber":"18000000001"};
使用原有请求方式请求报错error:Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: service unavailable (503)"。如图:

无意间发现MJExtension中有将字典转为JSON字符串的方法[params mj_JSONString],然后心里默默称赞了杰哥的强大,看了下转JSON的源码,以为如此简单就可以解决问题。事实证明我还是too young too simple,控制台依旧输出错误error:Error Domain=NSCocoaErrorDomain Code=3840 "No value for key in object around character 7998."。
无奈之下赶紧到github上翻看AFNetworking的文档,发现有这样一句话:
JSON Parameter Encoding
[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];
POST http://example.com/
Content-Type: application/json
{"foo": "bar", "baz": [1,2,3]}
立马将这句话加入到网络请求当中:(方法一)
// 获得请求管理者
AFHTTPSessionManager *session = [AFHTTPSessionManager manager];
// 设置请求格式
session.requestSerializer = [AFJSONRequestSerializer serializer];
[session.requestSerializer requestWithMethod:@"POST" URLString:URLString parameters:parameters error:nil];
[session POST:@"" parameters:@"" progress:nil success:nil failure:nil];
果不其然,这次的返回结果就正常了。
(方法二)最后在网上搜寻了一圈看到也可以使用AFURLSessionManager来做网络请求,不过AFURLSessionManager需要上传个NSData类型的数据。代码如下:
NSData *postData = [parameters dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSMutableURLRequest *request = [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:@"url" parameters:nil error:nil];
request.timeoutInterval= [[[NSUserDefaults standardUserDefaults] valueForKey:@"timeoutInterval"] longValue];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setHTTPBody:postData];
[[manager dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
if (!error) {
NSLog(@"responseObject: %@", responseObject);
} else {
NSLog(@"error: %@, %@, %@", error, response, responseObject);
}
}] resume];至此这个问题算是解决了,也可以正常拿到后台返回的数据。
AFNetworking3.0 Post JSON数据的更多相关文章
- Spring MVC 3.0 返回JSON数据的方法
Spring MVC 3.0 返回JSON数据的方法1. 直接 PrintWriter 输出2. 使用 JSP 视图3. 使用Spring内置的支持// Spring MVC 配置<bean c ...
- swift3.0 存取json数据到沙盒
do { //将json保存到本地 let jsonData = try JSONSerialization.data(withJSONObject: dict, options: .prettyPr ...
- AFNetworking 2.0 获取json数据时,返回 NSLocalizedDescription=Request failed: unacceptable content-type: text/html, 解决方法.
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSe ...
- json数据写入hbase
package main.scala.com.web.zhangyong168.cn.spark.java; import org.apache.hadoop.hbase.HBaseConfigura ...
- Core3.0返回的Json数据大小写格式问题
前言 测试发现,CoreWebAPI返回的Json数据,会将字段的首字母转换为小写, 经百度得,返回数据会默认驼峰命名,导致的. 随即百度, https://www.cnblogs.com/cdone ...
- 基于AFNetworking3.0网络封装
概述 对于开发人员来说,学习网络层知识是必备的,任何一款App的开发,都需要到网络请求接口.很多朋友都还在使用原生的NSURLConnection一行一行地写,代码到处是,这样维护起来更困难了. 对于 ...
- iOS_SN_基于AFNetworking3.0网络封装
转发文章,原地址:http://www.henishuo.com/base-on-afnetworking3-0-wrapper/?utm_source=tuicool&utm_medium= ...
- AFNetworking3.0的基本使用方法
前一段时间在做项目的时候发现AFNetworking3.0已经被大众所接受,所以以后肯定会有很多程序猿朋友必须了解和转移至3.0了,这是我这段时间使用和学习总结出来的一些常用的知识点,希望对大家有用. ...
- 使用TSQL查询和更新 JSON 数据
JSON是一个非常流行的,用于数据交换的文本数据(textual data)格式,主要用于Web和移动应用程序中.JSON 使用“键/值对”(Key:Value pair)存储数据,能够表示嵌套键值对 ...
随机推荐
- php隐藏WEBSHELL技巧
把shell添加到网站logo图片里: cat logo.png shell.php > logo.png 在网站任意一个php文件里添加下面的最简单方法: fputs(fopen('/home ...
- openjudge-NOI 2.6基本算法之动态规划 专题题解目录
1.1759 最长上升子序列 2.1768 最大子矩阵 3.1775 采药 4.1808 公共子序列 5.1944 吃糖果 6.1996 登山 7.2000 最长公共子上升序列 8.2718 移动路线 ...
- HDU 6201 2017沈阳网络赛 树形DP或者SPFA最长路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6201 题意:给出一棵树,每个点有一个权值,代表商品的售价,树上每一条边上也有一个权值,代表从这条边经过 ...
- (My)SQL
1.SQL语句分类 DDL(Data Definition Languages)语句:用来创建 删除 修改数据库.表.列.索引等数据库对象.常用的语句关键字主要包括create.drop.alter等 ...
- Django-manage.py
一.manage.py命令选项 manage.py是每个Django项目中自动生成的一个用于管理项目的脚本文件,需要通过python命令执行.manage.py接受的是Django提供的内置命令. 内 ...
- GO语言Windows下Liteide
今天用到了. 就学习一下. https://www.golangtc.com/t/56e7caf5b09ecc66b90000fe 在网上看了好多此类介绍,操作太麻烦,自己琢磨出来怎么配置了. 以Li ...
- Maven使用第三方jar文件的两种方法<转>
http://www.cnblogs.com/sekai/p/5932206.html 今天用上了.. ===================== 在Maven中,使用第三方库一般是通过pom.xml ...
- Loadrunner中cookie解释与用法
loadrunner对于cookie的处理loadrunner中与cookie处理相关的常用函数如下: web_add_cookie():添加新的cookie或者修改已经存在的cookie web_r ...
- bzoj 1123 tarjan求割点
#include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk mak ...
- cordova 整合 webpack vue
cordova 是hybrid开发app的一个框架,通过js桥接原生api实现了js调用原生的一些功能:本打算学习下阿里的weex:可是一直打包不了,加上之前也用过cordova,打算使用cordov ...