AFNetworking POST se envía como GET

Discúlpeme si esto es normal, pero estoy intentando enviar una request de correo desde iOS usando AFNetworking. Usando Charles para monitorear la request, veo que se envía un GET:

GET /api/updateTeamAlert/ HTTP/1.1 Host: www.******r.co Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en;q=1, fr;q=0.9, de;q=0.8, ja;q=0.7, nl;q=0.6, it;q=0.5 Connection: keep-alive User-Agent: ****** Alerts/1.0 (iPhone Simulator; iOS 6.1; Scale/2.00) 

¿Esto es normal? Estoy tratando de averiguar por qué mis parameters POST están vacíos en el server, ¿podría ser esta la causa?

Estoy creando mi request de esta manera:

 NSDictionary *params = @{@"device_id":@"test-device", @"innings":@6, @"team":@"WashingtonNationals"}; [_client postPath:@"updateTeamAlert" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { NSString *responseStr = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; NSLog(@"Request Successful, response '%@'", responseStr); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"[HTTPClient Error]: %@", error.localizedDescription); }]; 

ACTUALIZAR

Bueno, todo lo que tuve que hacer para lograr que esto funcione fue cambiar el postPath para include el '/' final, tal vez esto sea obvio para la mayoría, pero me encantaría una explicación para la respuesta aceptada.

Bueno, todo lo que tuve que hacer para lograr que esto funcione fue cambiar el postPath para include el '/' final, tal vez esto sea obvio para la mayoría, pero me encantaría una explicación para la respuesta aceptada.

Las aplicaciones PHP a menudo tienen serveres mal configurados que pierden información (como el método HTTP) al hacer una networkingirección. En su caso, agregando el / resolved a la ruta canónica para su service web particular, pero al networkingirigir a ese punto final, el POST se cambió a GET .

Otra forma de resolver este problema es utilizar AFURLConnectionOperation -setRedirectResponseBlock y asegurarse de que la request de networkingirección tenga el verbo correcto.

La respuesta de @mattt anterior es incorrecta.

HTTP / 1.0 302 funcionó como lógicamente esperaba "POST / FOO" 302 a / BAR implicaba que obtendría "POST / BAR". Sin embargo, poco o ningún cliente lo implementó de esta manera, y comúnmente cambió el método a GET. Esto es algo comprensible ya que el nuevo recurso networkingirigido es desconocido para el usuario, y uno no debe POST de manera involuntaria a un recurso desconocido.

HTTP / 1.1 borra esto: los 302 deben informar al usuario sobre la networkingirección. 307 hacen que la networkingirección funcione como era de esperar, manteniendo el método.

AFNetworking está configurado para actuar como todos los demás clientes traviesos que hay – 302 alteran el método para GET, lo que le da al cliente la oportunidad de alertar al usuario. Acabo de tener este problema con AFNetworking: establecí algunos puntos de corte, pisé el paso y vi el método cambiar ante mis ojos.

Todavía no he probado que los 307 funcionan como se definen con AFNetworking, pero independientemente, los 302 se comportan de la forma extraña en que HTTP / 1.1 los definió para que funcionen.

tl; dr – En HTTP / 1.1 usa 307's para networkingirigir y mantener el método, no 302's.

Me encontré con un problema similar en el que cada request POST se interpretaba como una request GET. Resulta que, al igual que los serveres que ensucian cuando se pierde la barra final, el tipo de request se puede perder cuando su DNS networkingirige www.site.com a site.com o viceversa.

En mi caso, mi DNS obliga a site.com a networkingirigir a www.site.com , pero había establecido mis URL base para apuntar a site.com . Por lo tanto, cuando envié una request a mi API en site.com/api , la request se networkingirigió a www.site.com/api y se perdió el tipo de request, y el server pasaba por defecto a una request GET. Entonces agregué el www a mi URL base, envié mi request directamente a www.site.com/api (evitando la networkingirección DNS) y mis requestes POST comenzaron a funcionar de nuevo.

TL; DR: Al agregar el www (o eliminarlo, según su DNS) eliminé la networkingirección y solucioné el problema.