Publicación de JSON como el cuerpo de una request POST utilizando AFHTTPClient

Estoy tratando de encontrar una manera, utilizando AFNetworking, para configurar el encabezado Content-Type para que sea application / json y para POST con JSON en el cuerpo. Los methods que veo en la documentation (postPath y requestWithMethod) toman un dictionary de parameters, que supongo que está codificado en la syntax de formulario estándar. ¿Alguien sabe de una forma de instruir a AFHTTPClient para que use JSON para el cuerpo o necesito escribir la request por mi count?

Seguí y revisé la última AFNetworking de su twig maestra . De inmediato, pude get el comportamiento deseado. Miré y parece un cambio reciente (6 de octubre), así que quizás necesites sacar lo último.

Escribí el siguiente código para hacer una request:

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]; 

En mi proxy puedo ver la request en bruto:

 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"} 

Desde la fuente AFHTTPClient puede ver que la encoding JSON es la pnetworkingeterminada según la línea 170 y la línea 268 .

Para mí, json NO fue la encoding pnetworkingeterminada. Puede establecerlo manualmente como la encoding pnetworkingeterminada como esta:

(usando el código de 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]; 

la parte crucial:

 [client setParameterEncoding:AFJSONParameterEncoding];