objective-c - pods - objective c networking library
Publicación de JSON como el cuerpo de una solicitud POST utilizando AFHTTPClient (2)
Para mí, json NO fue la codificación predeterminada. Puede configurarlo manualmente como la codificación predeterminada de esta manera:
(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];
Estoy tratando de encontrar una forma, utilizando AFNetworking, para configurar el encabezado Content-Type para que sea application / json y 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 asumo están codificados en la sintaxis de formulario estándar. ¿Alguien sabe de una forma de indicar a AFHTTPClient que use JSON para el cuerpo, o necesito escribir la solicitud por mi cuenta?
Seguí adelante y comprobé la última red de AF de su rama principal . Fuera de la caja pude obtener el comportamiento deseado. Miré y parece que fue un cambio reciente (6 de octubre), así que es posible que solo necesites sacar lo último.
Escribí el siguiente código para hacer una solicitud:
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 proxy puedo ver la solicitud 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 de AFHTTPClient puede ver que la codificación JSON es la predeterminada basada en la línea 170 y la línea 268 .