ios - AFNetworking 2.0-"tipo de contenido inaceptable: texto/plano"
json node.js (7)
He seguido la respuesta publicada por @KIO pero no funcionó en mi escenario.
Después de ir con muchas respuestas pude encontrar una solución que funcionó para mí.
AFHTTPRequestOperationManager *operation = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url];
operation.responseSerializer = [AFJSONResponseSerializer serializer];
AFJSONResponseSerializer *jsonResponseSerializer = [AFJSONResponseSerializer serializer];
NSMutableSet *jsonAcceptableContentTypes = [NSMutableSet setWithSet:jsonResponseSerializer.acceptableContentTypes];
[jsonAcceptableContentTypes addObject:@"text/plain"];
jsonResponseSerializer.acceptableContentTypes = jsonAcceptableContentTypes;
operation.responseSerializer = jsonResponseSerializer;
Estoy usando AFNetworking 2.0 para leer JSON desde un servicio que estoy creando (en localhost
por ahora) en Node. Cosas bastante normales.
Nodo está enviando JSON de esta manera:
res.setHeader(''Content-Type'',''application/json'');
res.end( JSON.stringify(...));
Mi código de primer paso de iOS está intentando leer esa información de la siguiente manera:
typedef void(^NextBlock)();
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
[manager GET:self.newestTimestampURL.absoluteString
parameters:nil
success:^(AFHTTPRequestOperation *operation, id responseObject)
{
//NSDictionary *response =
NSLog(@"got %@", responseObject );
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
NSLog(@"fail %@", error );
}];
Este es el error que estoy recibiendo:
Error Domain=AFNetworkingErrorDomain Code=-1016 "Request failed: unacceptable content-type: text/plain" UserInfo=0xb783e30 {NSErrorFailingURLKey=http://localhost:3000/api/v1/log/newest, AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0xb656a70> { URL: http://localhost:3000/api/v1/log/newest } { status code: 200, headers {
Connection = "keep-alive";
ContentType = "application/json";
Date = "Fri, 27 Dec 2013 20:58:50 GMT";
"Transfer-Encoding" = Identity;
} }, NSLocalizedDescription=Request failed: unacceptable content-type: text/plain}
Puedo enrollar (-i) la URL http://localhost:3000/api/v1/log/newest
y obtener los datos que estoy esperando, y es application / json como se esperaba. Si cargo esos datos en mi navegador web, obtengo JSON según lo esperado por el inspector de herramientas de desarrollo.
Pero al usar AFNetworking, obtengo este misterioso error "tipo de contenido inaceptable: texto / sin formato". ¿Alguna idea?
NOTA: nunca he usado AFNetworking antes, así que probablemente lo esté usando incorrectamente.
Parece que el servidor está enviando "texto / html", y este tipo no es compatible de forma predeterminada. Agregue @ "text / html" para "acceptableContentTypes"
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
Solo usa:
RÁPIDO:
manager.responseSerializer.acceptableContentTypes = NSSet(object: "text/plain") as Set<NSObject>
OBJ-C:
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];
Trabaja para mi.
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
trabaja para mi.
Solución actualizada para Swift.
Si está utilizando AFNetworking en Swift. Entonces esta solución podría ayudarte. Aceptará la mayoría de los tipos de contenido.
let manager=AFHTTPRequestOperationManager()
manager.responseSerializer = AFJSONResponseSerializer(readingOptions: NSJSONReadingOptions.AllowFragments) as AFJSONResponseSerializer
manager.requestSerializer = AFJSONRequestSerializer() as AFJSONRequestSerializer
manager.responseSerializer.acceptableContentTypes = NSSet(objects:"application/json", "text/html", "text/plain", "text/json", "text/javascript", "audio/wav") as Set<NSObject>
NSURL *url = [NSURL URLWithString:RSS_WORLD_NEWS];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
// Make sure to set the responseSerializer correctly
operation.responseSerializer = [AFXMLParserResponseSerializer serializer];
operation.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/rss+xml"];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSXMLParser *XMLParser = (NSXMLParser *)responseObject;
[XMLParser setShouldProcessNamespaces:YES];
XMLParser.delegate = self;
[XMLParser parse];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
[MBProgressHUD hideHUDForView:self.view animated:YES];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error Retrieving contents"
message:[error localizedDescription]
delegate:nil
cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
}];
[operation start];
trabaja para mi