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 .