【问题标题】:AFNetworking read text/html as html and not JSONAFNetworking 将 text/html 读取为 html 而不是 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);
    }];

【问题讨论】:

    标签: afnetworking


    【解决方案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,其中定义了序列化程序并创建与那些类似的新序列化程序。
    猜你喜欢
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 2012-07-10
    • 2014-01-17
    相关资源
    最近更新 更多