2011-10-30 14 views
16

AFNetworkingを使用してContent-Typeヘッダーをapplication/jsonに設定し、JSONを本体に設定する方法を探しています。私がドキュメント(postPathとrequestWithMethod)で見ているメソッドは両方とも、標準形式構文でエンコードされていると仮定するパラメータの辞書を取ります。 AFHTTPClientにJSONを使用するよう指示する方法は誰か知っていますか?それとも自分でリクエストを書く必要がありますか?AFHTTPClientを使用したPOST要求の本体としてのJSONの投稿

答えて

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 170line 268に基づいています。

+11

えっ、私はJSONをとしたことに気づきませんでしたデフォルトのエンコーディングこれは間違いです(URL形式のエンコーディングはいつもデフォルトであることを意図していましたが、どういう形になっているのか分かりません)。 @EricAndres:これを書き留め、あなたのコードに 'self.parameterEncoding = AFJSONParameterEncoding;'を付けて、パラメータエンコーディングをJSONに手動で設定してください。 – mattt

+0

恐ろしい、応答のおかげで。チャンスが得られたら、後で設定self.parameterEncodingを試してみましょう。 –

+0

hmm ... jsonはデフォルトのエンコードではありませんでしたが、NVPは(2013年初め) – stackOverFlew

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

ありがとうございます! あなたは正しく、 '[クライアントsetParameterEncoding:AFJSONParameterEncoding];が見つかりませんでした。 さらに、これはNSDictionaryで実際に動作するためにも必要になると思われます: '[client registerHTTPOperationClass:[AFJSONRequestOperation class]]; ' – thedp

+0

ありがとうございました。あなたは私の日を救う! – kb920

関連する問題