AFNetworkingを使用してContent-Typeヘッダーをapplication/jsonに設定し、JSONを本体に設定する方法を探しています。私がドキュメント(postPathとrequestWithMethod)で見ているメソッドは両方とも、標準形式構文でエンコードされていると仮定するパラメータの辞書を取ります。 AFHTTPClientにJSONを使用するよう指示する方法は誰か知っていますか?それとも自分でリクエストを書く必要がありますか?AFHTTPClientを使用したPOST要求の本体としてのJSONの投稿
16
A
答えて
23
私は先に進み、最新のAFNetworkingをmaster branchからチェックアウトしました。ボックスの外で、私は希望の動作を得ることができました。私は見て、それは最近の変更(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"}
AFHTTPClientソースからは、JSONエンコーディングがあることがわかりますデフォルトはline 170、line 268に基づいています。
13
私の場合、jsonはデフォルトのエンコードではありませんでした。手動でこのようなデフォルトのエンコードとして設定することができます
(使用エヴァンのコード)
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. Jerseyで本体要求のPOST JSON
- 2. POST要求のスムーズ投稿なし
- 3. CでFastCGIを使用してPUTまたはPOST要求の本体にアクセス
- 4. rspecを使用してjson本体をAPIに投稿する方法
- 5. curlを使用して要求のJSONデータを処理する投稿
- 6. JavaScriptを使用したJSONの投稿
- 7. Play 1.2.4:本体でXMLを使用したPOST要求を処理する
- 8. retrofitを使用した最小投稿要求の作成
- 9. リダイレクト付きのJson投稿要求
- 10. ngResource:Angularjs - ヘッダーと要求本文を含む投稿要求を送信します。
- 11. JSONとWeb APIを使用したPOST要求ですか?
- 12. if($ _ SERVER ['REQUEST_METHOD'] == 'POST')とアンドロイド投稿要求が機能しない
- 13. JSONを使用したHTTP POST要求(Javaの場合)
- 14. Moqを使用してJSON本体で模擬HTTP POST要求を作成する方法
- 15. 解析JSONのPOST本体
- 16. Swift RestKitは本体にJSONを投稿しません
- 17. 要求本体としてネストされたjsonノードjsでswagger-uiを使用して入力
- 18. tcpレベルを使用した投稿要求
- 19. retrofit2の投稿要求を作成中に、応答本体がnullです
- 20. nginx proxy_bufferingとnode js formidableを使用したPOST本体のパイプ
- 21. jsonで投稿要求を編集してリダイレクトする
- 22. 連続した投稿要求ノードJS
- 23. 投稿要求に正しい本文を送信
- 24. HTTP POST要求本体がコード400を返します
- 25. バルカンの要求を使用したPOST要求のデータとファイル(ロボットフレームワーク)
- 26. フォームデータを使用したPOST要求
- 27. $ httpを使用してjsonを投稿するときのエラー
- 28. django投稿要求のデータキャッシング
- 29. ASP.NETコアを使用した単体テストでのPOST要求のシミュレート
- 30. JSweetを使用してJSONとして投稿する
えっ、私はJSONをとしたことに気づきませんでしたデフォルトのエンコーディングこれは間違いです(URL形式のエンコーディングはいつもデフォルトであることを意図していましたが、どういう形になっているのか分かりません)。 @EricAndres:これを書き留め、あなたのコードに 'self.parameterEncoding = AFJSONParameterEncoding;'を付けて、パラメータエンコーディングをJSONに手動で設定してください。 – mattt
恐ろしい、応答のおかげで。チャンスが得られたら、後で設定self.parameterEncodingを試してみましょう。 –
hmm ... jsonはデフォルトのエンコードではありませんでしたが、NVPは(2013年初め) – stackOverFlew