我想找到一種方法,使用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主體的Ruby POST請求
- 2. JSON體POST請求
- 3. 發送JSON對象作爲POST請求
- 4. Jetty servlet:如何使用JSON主體將具有參數的GET請求轉發爲POST請求?
- 5. HTML5,POST請求主體
- 6. 使用Content-Type:multipart/form-data發佈結果爲空請求主體
- 7. 如何在SprayTest中使用json主體模擬POST請求?
- 8. JQuery-使用授權發佈Post請求
- 9. jQuery在請求主體中發佈有效的json
- 10. 如何使用Postman將GET REST請求的輸出作爲POST請求的主體發送
- 11. 發送json作爲請求正文或POST JSON的變量
- 12. Lua發送json請求主體
- 13. Angular 2/Ionic 2發佈請求主體
- 14. 使用JSON POST請求
- 15. Alamofire:發佈POST請求後的參數爲Json
- 16. 多個AFHTTPClient請求
- 17. 如何編寫一個Serializable作爲http post請求的主體?
- 18. 使用JSON PHP發佈http請求
- 19. 通過.ajax發送json數據作爲POST請求調用
- 20. JSON POST請求 - JSON數據,如何使用代理請求在跨服務器上使用JSON格式的數據發佈POST請求
- 21. 如何使用PowerShell爲POST請求創建原始主體
- 22. 如何解析POST請求的主體
- 23. 帶JSON體的POST請求AFNetworking 2.0
- 24. 谷歌App Engine的JSON POST請求體
- 25. 如何製作json發佈請求?
- 26. 使用JSON參數作爲數組的Java HTTP POST請求
- 27. 將發佈請求的主體分解爲變量
- 28. 如何使用Java爲Blitline發送Json POST請求?
- 29. 當發出包含JSON主體的POST請求時,request.body是空的
- 30. 我可以將JSON/XML字符串作爲POST請求發佈到REST ServiceStack嗎?
咦,我沒有意識到JSON設定爲默認編碼。這是一個錯誤(URL表單編碼一直是我的默認打算;我不知道這是如何滑入)。 @EricAndres:請注意這一點,並手動將參數編碼設置爲JSON,在您的代碼中使用'self.parameterEncoding = AFJSONParameterEncoding;'。 – mattt
太棒了,謝謝你的回覆。稍後當我有機會時,我會嘗試設置self.parameterEncoding。 –
hmm ... json不是默認編碼,但NVP是(截至2013年初) – stackOverFlew