AFNetworking 2.0 – “不可接受的内容types:文本/纯文本”

我正在使用AFNetworking 2.0来从我正在构build的服务(现在在localhost上)中读取JSON。 很正常的东西。

Node正在发送JSON,如下所示:

 res.setHeader('Content-Type','application/json'); res.end( JSON.stringify(...)); 

我的iOS第一遍代码试图读取像这样的数据:

 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 ); }]; 

这是我得到的错误:

 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} 

我可以curl(-i)url http://localhost:3000/api/v1/log/newest并获取我期望的数据,并且它是应用程序/ json。 如果我在我的Web浏览器中加载这些数据,我会按照预期的每个开发工具检查器来获取JSON。

但使用AFNetworking,我得到这个神秘的“不可接受的内容types:文本/纯”错误。 任何想法?

注:我从来没有使用过AFNetworking,所以我可能使用不正确。

看来服务器发送的是“text / html”,这种types默认是不支持的。 为“acceptableContentTypes”添加@“text / html”

 manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; 

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

为我工作。

为我工作。

 manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; 

只要使用:

迅速:

 manager.responseSerializer.acceptableContentTypes = NSSet(object: "text/plain") as Set<NSObject> 

OBJ-C:

 manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; 

我遵循@KIO发布的答案,但在我的scheme中无效。

去了很多答案后,我能find解决scheme,为我工作。

 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; 
 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]; 

为我工作

更新了Swift的解决scheme。

如果您在Swift中使用AFNetworking。 那么这个解决scheme可能会帮助你 它将接受大部分内容types。

 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> 
    Interesting Posts