La request de AFNetworking falló: tipo de contenido inaceptable: text / html

Estoy intentando enviar la request de POST al server, y todavía no lo puedo hacer. Por favor, ayúdame por lo que es incorrecto.

Instancia de instancia compartida:

- (id)init{ self = [self initWithBaseURL:[NSURL URLWithString:kBaseURL]]; if(self) { self. self.responseSerializer = [AFJSONResponseSerializer serializer]; [self.requestSerializer setAuthorizationHeaderFieldWithUsername:@"user" password:@"password"]; parsingQueue = dispatch_queue_create("com.company.queue.parser",NULL); } return self; 

Cuerpo del método de publicación:

 NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:[FSApplicationManager shanetworkingInstance].userToken, @"user_token", nil]; [params setObject:[NSNumber numberWithDouble:userId] forKey:@"user_id"]; [params setObject:[NSNumber numberWithDouble:filmId] forKey:@"film_id"]; [params setObject:[NSNumber numberWithBool:NO] forKey:@"sendCopy"]; if([subject length]>0){ [params setObject:subject forKey:@"subject"]; } [params setObject:message forKey:@"message"]; NSString *URLString = [NSString stringWithFormat:@"%@%@", kBaseURL, kAPISendMessageToUser]; NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"POST" URLString:URLString parameters:params error:nil]; [request addValue:[self signatureWithURL:[request.URL absoluteString] requestBody:[[NSString alloc] initWithData:[request HTTPBody] encoding:NSUTF8StringEncoding]] forHTTPHeaderField:@"X-SERVAPI-Signature"]; [request addValue:pub forHTTPHeaderField:@"X-SERVAPI-PublicKey"]; AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id response){ NSLog(@"%@", response); } failure:^(AFHTTPRequestOperation *operation, NSError *error){ NSLog(@"%@, \n response %@", error, operation.responseObject); }]; [self.operationQueue addOperation:operation]; return operation; 

error que recibo:

Error Domain = AFNetworkingErrorDomain Code = -1011 "Error de request: error del server interno (500)" UserInfo = 0xcf0c2f0 {NSErrorFailingURLKey = https://ppd.someserver.com/api/user/send-message , NSLocalizedDescription = Solicitud fallida: server interno error (500), NSUnderlyingError = 0xcf06ce0 "Solicitud fallida: tipo de contenido inaceptable: text / html", AFNetworkingOperationFailingURLResponseErrorKey = {URL: https://ppd.someserver.com/api/user/send-message } {código de estado: 500 , encabezados {Conexión = cerrar; "Content-Encoding" = gzip; "Content-Length" = 1412; "Content-Type" = "text / html; charset = UTF-8"; Fecha = "Dom, 14 Dic 2014 13:46:57 GMT"; P3P = "CP = \" NOI ADM DEV PSAi COM NAV NUESTRO OTRO STP IND DEM \ ""; Servidor = Apache; Vary = "Aceptar-Codificar"; "X-Powenetworking-By" = "PHP / 5.3.3-7 + squeeze19"; }}},

He intentado contactar a Guy responsable del server y eso es lo que obtengo:

No es necesario agregar el tipo de contenido a su request, pero si desea hacerlo, ya que está utilizando un método POST, debe utilizar: Tipo de contenido: application / x-www-form-urlencoded;

Estás recibiendo respuesta HTML. Para diagnosticar lo que está sucediendo, es útil ver lo que dicho HTML realmente dice.

Cambie temporalmente el serializador de respuesta a AFHTTPResponseSerializer y luego examine la respuesta HTML y podría proporcionar alguna información que lo iluminará sobre lo que está mal con la request. O podría dejar el código solo y observar el intercambio con Charles u otra herramienta similar. Pero el objective es ver por qué tienes un código de estado de 500 y el HTML a podría darte algunas pistas.

En cuanto a por qué la request no está funcionando, es difícil para nosotros decir sin ver la API. La combinación de styles de nombre key en la request es sospechosa (subrayado en algunos, camelCase en otros), pero no conocemos la API, por lo que no está claro si ese es un problema o no.

Con respecto al tipo de Content-Type , AFNetworking hará eso por usted (y usará la application/x-www-form-urlencoded , así que no creo que ese sea el problema.

Si el equipo de soporte de API no está familiarizado con los ejemplos de código Objective-C / AFNetworking, es posible que desee observar la request mediante una herramienta como Charles o algo por el estilo. A continuación, capture la request en bruto enviada y tal vez el equipo de soporte de API pueda diagnosticar mejor el problema sin la distracción del código Objective-C / AFNetworking.

El problema es que el server le está enviando una respuesta codificada en HTML. Puede hacer una de estas 2 opciones:

  1. Habla con las personas del lado del server, para codificarlo como un json.

  2. Intente solucionarlo usted mismo haciendo lo siguiente: Después de configurar su auto.responseSerializer, ponga esta línea:

    self.operationManager.responseSerializer.acceptableContentTypes = [self.operationManager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];

Esta línea agrega "text / html" a los types aceptables. Siempre que la respuesta del server sea serializable, debe estar bien.