我想找到一种方法,使用AFNetworking,将Content-Type头设置为application/json,并在主体中使用JSON进行POST。我在文档中看到的方法(postPath和requestWithMethod)都采用参数字典,我假设这些参数是以标准格式语法编码的。有谁知道一种方法来指导AFHTTPClient为身体使用JSON,还是我需要自己写请求?使用AFHTTPClient发布JSON作为POST请求的主体
16
A
回答
23
我继续从他们的master branch检查出最新的AFNetworking。开箱即用,我能够获得理想的行为。我看起来像是最近的变化(10月6日),所以你可能只需要拉最新的。
我写了下面的代码,以使一个请求:
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://localhost:8080/"]];
[client postPath:@"hello123" parameters:[NSDictionary dictionaryWithObjectsAndKeys:@"v1", @"k1", @"v2", @"k2", nil]
success:^(id object) {
NSLog(@"%@", object);
} failure:^(NSHTTPURLResponse *response, NSError *error) {
NSLog(@"%@", error);
}];
[client release];
在我代理,我可以看到原始的请求:
POST /hello123 HTTP/1.1
Host: localhost:8080
Accept-Language: en, fr, de, ja, nl, it, es, pt, pt-PT, da, fi, nb, sv, ko, zh-Hans, zh-Hant, ru, pl, tr, uk, ar, hr, cs, el, he, ro, sk, th, id, ms, en-GB, ca, hu, vi, en-us;q=0.8
User-Agent: info.evanlong.apps.TestSample/1.0 (unknown, iPhone OS 4.3.2, iPhone Simulator, Scale/1.000000)
Accept-Encoding: gzip
Content-Type: application/json; charset=utf-8
Accept: */*
Content-Length: 21
Connection: keep-alive
{"k2":"v2","k1":"v1"}
13
对我来说,json不是默认编码。您可以手动设置为默认的编码是这样的:
(使用Evan的代码)
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://localhost:8080/"]];
[client setParameterEncoding:AFJSONParameterEncoding];
[client postPath:@"hello123" parameters:[NSDictionary dictionaryWithObjectsAndKeys:@"v1", @"k1", @"v2", @"k2", nil]
success:^(id object) {
NSLog(@"%@", object);
} failure:^(NSHTTPURLResponse *response, NSError *error) {
NSLog(@"%@", error);
}];
[client release];
关键部分:
[client setParameterEncoding:AFJSONParameterEncoding];
相关问题
- 1. 发送JSON对象作为POST请求
- 2. JQuery-使用授权发布Post请求
- 3. jQuery在请求主体中发布有效的json
- 4. 发送json作为请求正文或POST JSON的变量
- 5. 如何使用Postman将GET REST请求的输出作为POST请求的主体发送
- 6. Angular 2/Ionic 2发布请求主体
- 7. 使用JSON POST请求
- 8. Alamofire:发布POST请求后的参数为Json
- 9. 如何编写一个Serializable作为http post请求的主体?
- 10. 如何使用PowerShell为POST请求创建原始主体
- 11. 带JSON体的POST请求AFNetworking 2.0
- 12. 谷歌App Engine的JSON POST请求体
- 13. 如何制作json发布请求?
- 14. 使用JSON参数作为数组的Java HTTP POST请求
- 15. 将发布请求的主体分解为变量
- 16. 如何使用Java为Blitline发送Json POST请求?
- 17. 当发出包含JSON主体的POST请求时,request.body是空的
- 18. 我可以将JSON/XML字符串作为POST请求发布到REST ServiceStack吗?
- 19. mod_security:允许没有请求主体的POST请求的规则
- 20. 发送层次NSDictionary作为POST请求
- 21. AS3 POST请求作为GET发送
- 22. Volley Post请求,在Json数组请求中发送Json对象
- 23. 使用JSON的Payfort REST POST请求
- 24. 使用json的原始POST请求
- 25. 使用JSON和Web API的POST请求?
- 26. 把简单的字符串作为请求主体的请求
- 27. 发送Frameset SRC作为发布请求
- 28. Asp.net Json Post请求
- 29. JSON在POST请求?
- 30. 使用POST请求和图表API发布到用户的墙
咦,我没有意识到JSON设定为默认编码。这是一个错误(URL表单编码一直是我的默认打算;我不知道这是如何滑入)。 @EricAndres:请注意这一点,并手动将参数编码设置为JSON,在您的代码中使用'self.parameterEncoding = AFJSONParameterEncoding;'。 – mattt
太棒了,谢谢你的回复。稍后当我有机会时,我会尝试设置self.parameterEncoding。 –
hmm ... json不是默认编码,但NVP是(截至2013年初) – stackOverFlew