AFNetworking 2 响应错误(内容类型:文本/html 而非 JSON)
Posted
技术标签:
【中文标题】AFNetworking 2 响应错误(内容类型:文本/html 而非 JSON)【英文标题】:AFNetworking 2 Response Error (Content type: text/html and not JSON) 【发布时间】:2014-01-14 16:37:19 【问题描述】:在尝试了几乎所有关于该主题的回复后,我都没有找到解决问题的有效答案。
问题:所以我在从AFNetworking 1.3
移植后使用AFNetworking 2.0.3
实现了我的应用程序的上传部分:
-(void)commandWithParams:(NSMutableDictionary*)params onCompletion:(JSONResponseBlock)completionBlock
NSData* uploadFile = nil;
if ([params objectForKey:@"file"])
uploadFile = (NSData*)[params objectForKey:@"file"];
[params removeObjectForKey:@"file"];
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://54.204.17.38"]];
manager.responseSerializer = [AFJSONResponseSerializer serilizer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"application/json"];
AFHTTPRequestOperation *apiRequest = [manager POST:@"/API" parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
if (uploadFile)
[formData appendPartWithFileData:uploadFile name:@"file" fileName:@"photo.jpg" mimeType:@"image/jpeg"];
success:^(AFHTTPRequestOperation *operation, id responseObject)
completionBlock(responseObject);
failure:^(AFHTTPRequestOperation *operation, NSError *error)
completionBlock([NSDictionary dictionaryWithObject:[error localizedDescription] forKey:@"error"]);
];
[apiRequest start];
我在使用此代码时遇到的错误是“请求失败:不可接受的内容类型:text/html”在我的浏览器中检查了“MIME type: application/json
”的响应标头之后。另外,我也在我的 API 顶部使用了 'header('Content-type: application/json')'(php API)。现在,如果我将序列化类型更改为“AFHTTPResponseSerializer
”而不是“AFJSONResponseSerializer
”,它不会吐出JSON error
,但它会给我一个不同的错误(随机无法识别的选择器错误)。
对于为什么我似乎无法通过这种方法获得JSON
响应有什么想法吗?
【问题讨论】:
【参考方案1】:您可以将AFHTTPSessionManager
设置为接受任何 MIME 类型:
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
【讨论】:
添加这个允许响应通过,但我现在得到一个新错误:Cocoa 错误 3840(我认为这意味着输入 JSON 无效)。我不确定为什么在验证 JSON 时它认为我的 JSON 无效 并响应您的修复...是的,它有效,但随后它破坏了我的应用程序执行的下一部分 - 当有人 ttys 登录时,我无法解析 API 响应 bc 它不是 json :( 我还通过 chrome 的 XHRposter 插件验证了 Web API 正在返回“Content-Type application/json”。任何想法或线索???【参考方案2】:知道了!因此,结果在不知不觉中,尽管我的 API 返回了有效的 JSON,但检查头响应记录在 Xcode 方面的问题(通过 NSLog(@"Error: %@", error);) ,它实际上返回了文本/HTML,因为它没有实际上点击正确的文件,它被某个地方的标题重新路由。在明确声明 API 路径为 /API/index.php 而不仅仅是 /API 之后,它开始返回有效的 JSON!接下来,在确保响应被正确地 JSON 序列化后(使用 requestManager.responseSerializer = [AFJSONResponseSerializer serializer];),应用程序工作了!
希望这可以帮助遇到同样问题的人:)
【讨论】:
以上是关于AFNetworking 2 响应错误(内容类型:文本/html 而非 JSON)的主要内容,如果未能解决你的问题,请参考以下文章
AFNetworking 2 setImageWithURL 自定义响应类型 image/jpeg
使用 AFNetworking 获取 OMDb API 数据