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的主要内容,如果未能解决你的问题,请参考以下文章

[AFN]AFNetworking错误总结

iOS 使用AFNetworking遇到异常 Request failed: unacceptable content-type: text/html

AFNetworking 修改

AFNetworking 2.0:NSLocalizedDescription=请求失败:不可接受的内容类型:文本/html

“请求失败:不可接受的内容类型:文本/html”使用 AFNetworking 2.0

无法使用 AFNetworking 发出 POST 请求