16

AFNetworking を使用して、Content-Type ヘッダーを application/json に設定し、本文に JSON を使用して POST する方法を見つけようとしています。ドキュメントに表示されているメソッド (postPath と requestWithMethod) はどちらも、標準形式の構文でエンコードされていると思われるパラメーターの辞書を取ります。本文に JSON を使用するように AFHTTPClient に指示する方法を知っている人はいますか?それとも、自分でリクエストを作成する必要がありますか?

4

2 に答える 2

23

私は先に進んで、彼らのマスターブランチから最新の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"}

AFHTTPClientソースから、JSONエンコーディングが行170行268に基づくデフォルトであることがわかります。

于 2011-10-30T09:43:26.357 に答える
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];
于 2013-03-17T06:59:29.370 に答える