AFNetworking 将 text/html 读取为 html 而不是 JSON
Posted
技术标签:
【中文标题】AFNetworking 将 text/html 读取为 html 而不是 JSON【英文标题】:AFNetworking read text/html as html and not JSON 【发布时间】:2014-09-30 01:20:24 【问题描述】:我正在使用 AFNetworking 并向我的服务器发出请求。理想情况下,我的服务器返回 JSON(带有正确的 content-type=application/json 标头)但有时会发生一些不好的事情,POST 请求只返回原始 html。发生这种情况时,我只想将 html 作为字符串读取。问题是我无法让 AFNetworking 处理任何不是 json 或 xml 的东西。我已经将 text/html 添加到一组接受的内容类型中。
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:KIWI_URL parameters:postParams success:^(AFHTTPRequestOperation *operation, id objects)
NSLog(objects);
failure:^(AFHTTPRequestOperation *operation, NSError *error)
NSLog(@"10error: %@", error);
];
【问题讨论】:
【参考方案1】:您可以通过更改 responseSerializer 来做到这一点。管理器初始化后添加此代码:
manager.responseSerializer = [AFCompoundResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];
在成功块中,您可以使用以下命令读取响应:
NSLog(@"RESPONSE:\n%@", [[NSString alloc] initWithData:responseObject encoding:1]);
【讨论】:
我的下一个问题:有没有办法让它默认为任何内容类型?我知道这就是 AFNetworking 的设计目的。但是他们为什么不添加对 text/html 的支持呢? 我不知道他们为什么不添加对 text/html 的支持。有很多现成的响应序列化器,f.ex。 AFJSONResponseSerializer、AFXMLParserResponseSerializer、AFXMLDocumentResponseSerializer、AFPropertyListResponseSerializer、AFImageResponseSerializer。如果没有您需要的响应序列化器,您可以创建从 AFHTTPResponseSerializer 继承的新类,并在那里指定您自己的响应序列化器。您可以查看 AFURLResponseSerialization.m,其中定义了序列化程序并创建与那些类似的新序列化程序。以上是关于AFNetworking 将 text/html 读取为 html 而不是 JSON的主要内容,如果未能解决你的问题,请参考以下文章
iOS 使用AFNetworking遇到异常 Request failed: unacceptable content-type: text/html
AFNetworking 2.0:NSLocalizedDescription=请求失败:不可接受的内容类型:文本/html