Estoy tratando de encontrar una forma, usando AFNetworking, para establecer el encabezado Content-Type para application/json y para POST con JSON en el cuerpo. Los métodos que estoy viendo en la documentación (postPath y requestWithMethod) toman un diccionario de parámetros, que supongo está codificado en la sintaxis de formulario estándar. ¿Alguien sabe de una forma de instruir a AFHTTPClient para usar JSON para el cuerpo, o tengo que escribir la solicitud por mi cuenta?Publicación de JSON como el cuerpo de una solicitud POST usando AFHTTPClient
Respuesta
Me adelanté y revisé la última AFNetworking de su master branch. Fuera de la caja, pude obtener el comportamiento deseado. Miré y parece un cambio reciente (6 de octubre) por lo que es posible que solo necesites sacar lo último.
que escribió el código siguiente para hacer una petición:
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];
Bajo mi representante puedo ver la solicitud de prima:
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 se puede ver que JSON codificación es la predeterminado basado en line 170 y line 268.
Para mí, json NO era la codificación predeterminada. Puede configurar manualmente de la codificación predeterminada de esta manera:
(utilizando 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];
¡Muchas gracias! Tenías razón, el '[client setParameterEncoding: AFJSONParameterEncoding];' faltaba. Pero además parece que esto también es necesario para que realmente funcione con NSDictionary: '[client registerHTTPOperationClass: [AFJSONRequestOperation class]];' – thedp
Muchas gracias. ¡¡Me salvaste el día !! – kb920
- 1. Ruby: ¿Cómo envío una solicitud JSON POST usando Curb?
- 2. Solicitud de publicación de AFNetworking con comentarios de json
- 3. REST API: ¿Cuerpo de solicitud como JSON o datos POST simples?
- 4. jQuery publicando json válido en el cuerpo de solicitud
- 5. Usando el cliente jersey para hacer una operación POST con params de solicitud y un cuerpo de solicitud
- 6. Solicitud JSON POST en el iPhone (usando HTTPS)
- 7. Restlet POST usando JSON
- 8. Envío de una solicitud JSON POST con el preprocesador BSF
- 9. ¿Por qué jquery publica json como un nombre de parámetro en lugar de como el cuerpo de la solicitud?
- 10. Usando JSON POST Request
- 11. Solicitud POST usando RCurl
- 12. ¿Cómo envío JSon como BODY en una solicitud POST al servidor desde una aplicación de Android?
- 13. Publicación de HTTP como IE6 usando C#
- 14. AFNetworking - ¿Cómo hacer solicitud POST
- 15. Publicación usando POST desde C# sobre https
- 16. Cómo enviar datos JSON como cuerpo de solicitud en Apache CXF jax-rs (REST)
- 17. Jquery ajax solicitud de publicación no funciona
- 18. ¿Cómo obtener el cuerpo de la solicitud de publicación en Scalatra?
- 19. Cómo analizar json de una solicitud POST entrante en Rails?
- 20. ¿Cómo enviar una solicitud POST usando django?
- 21. ¿Cómo puedo hacer una solicitud JSON POST con LWP?
- 22. PHP obtener el cuerpo de la solicitud PUT
- 23. Enviando solicitud de HTTP Post con acción SOAP usando org.apache.http
- 24. Cómo convertir el cuerpo de la solicitud HTTP en el objeto JSON en Java
- 25. ¿Cómo recibir JSON en una solicitud POST en CherryPy?
- 26. Pubsubhubbub en rieles. ¿Cómo extraer el contenido del cuerpo de POST sin procesar de la solicitud de POST?
- 27. Obteniendo el cuerpo de contenido de http post usando php CURL
- 28. Cómo analizar el "cuerpo de solicitud" utilizando python CGI?
- 29. ¿Cómo manejo los datos json enviados como una publicación HTTP a una aplicación cakephp?
- 30. ¿Cómo obtener el cuerpo de un POST en php?
Eh, no me di cuenta JSON se estableció a ser la codificación predeterminada. Esto es un error (la forma de codificación de URL siempre ha sido mi intención de ser la predeterminada, no estoy seguro de cómo se deslizó). @EricAndres: tenga en cuenta esto, y establezca la codificación del parámetro en JSON manualmente, con 'self.parameterEncoding = AFJSONParameterEncoding;' en su código. – mattt
Impresionante, gracias por la respuesta. Probaré la configuración self.parameterEncoding later cuando tenga la oportunidad. –
hmm ... json no era la codificación predeterminada, pero NVP estaba (a principios de 2013) – stackOverFlew