我想找到一種方法,使用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