¿Cómo configuro los datos para una request "PUT" con AFNetworking?

Empecé a utilizar AFNetworking y funciona bien cuando se trata de hacer una simple "GET" -request. Sin embargo, ahora estoy intentando hacer una request de "POST". Utilizo el código siguiente para hacer la request "GET". Al mirar el puthPath de AFHTTPClient no hay forma de configurar los datos para usar para el cuerpo. Mi conjetura es que hay otra forma de solucionar esto. He estado buscando en AFHTTPOperation como una forma de solucionar esto. Sin embargo, no estoy poniendo esto a trabajar. El problema es que no sé cómo usarlo con authentication básica.

¿Alguien podría darme una pista de cómo hacer un simple "POST" -request con AFNetworking?

AFHTTPClient* client = [AFHTTPClient clientWithBaseURL:ServerURL]; [client setAuthorizationHeaderWithUsername:self.username password:self.password]; NSString* resourcePath = [NSString stringWithFormat:@"/some/resource/%@", endPath]; [client getPath:resourcePath parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { // Success code omitted } failure:^(AFHTTPRequestOperation *operation, NSError *error) { // Some error handling code omitted } ]; 

No encontré ninguna forma fácil de hacer esto. Pero hice lo recomendado y creé mi propia subclass de AFHTTPClient . En la subclass implementé los methods a continuación. Esto permite realizar requestes POST-request y PUT-requests con mis propios datos.

 - (void)postPath:(NSString *)path parameters:(NSDictionary *)parameters data:(NSData*)data success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; { NSURLRequest *request = [self requestWithMethod:@"POST" path:path parameters:parameters data:data]; AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure]; [self enqueueHTTPRequestOperation:operation]; } - (void)putPath:(NSString *)path parameters:(NSDictionary *)parameters data:(NSData*)data success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; { NSURLRequest *request = [self requestWithMethod:@"PUT" path:path parameters:parameters data:data]; AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure]; [self enqueueHTTPRequestOperation:operation]; } -(NSMutableURLRequest*)requestWithMethod:(NSString *)method path:(NSString *)path parameters:(NSDictionary *)parameters data:(NSData*)data; { NSMutableURLRequest* request = [super requestWithMethod:method path:path parameters:parameters]; [request setHTTPBody:data]; return request; } 

Con AFNetworking 2.0, solo copio el código de

 - (AFHTTPRequestOperation *)PUT:(NSString *)URLString parameters:(id)parameters success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; 

y agrega un

 [request setHTTPBody:data]; 

Aquí es:

 NSString* str = [bookDetailLink objectForKey:@"Body"]; NSData* data = [str dataUsingEncoding: NSUTF8StringEncoding]; NSMutableURLRequest *request = [self.manager.requestSerializer requestWithMethod:@"PUT" URLString:bookingDetailUrl parameters:nil error:nil]; [request setHTTPBody:data]; AFHTTPRequestOperation *operation = [self.manager HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *op, NSHTTPURLResponse *response) { NSLog(@"%@", response); } failure:^(AFHTTPRequestOperation *op, NSError *error) { NSLog(@"%@", error); }]; [self.manager.operationQueue addOperation:operation]; 

Integro Skyscanner API a nuestra aplicación de iOS utilizando AFNetworking.

Con AFNetworking 1.3.2, el siguiente código funciona para mí:

 NSData *imageData = UIImageJPEGRepresentation(thumb, 0.85F); AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"https://example.com/"]]; NSMutableURLRequest *request = [httpClient requestWithMethod:@"PUT" path:@"/foo" parameters:nil]; [request setHTTPBody:imageData]; [request setValue:@"image/jpeg" forHTTPHeaderField:@"Content-Type"]; AFHTTPRequestOperation *operation = [httpClient HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *op, NSHTTPURLResponse *response) { NSLog(@"%@", response); } failure:^(AFHTTPRequestOperation *op, NSError *error) { NSLog(@"%@", error); }]; [operation start]; 

Esto resulta en una request PUT con encabezados correctos, Content-Lenght y RESTfulness general 🙂