Swift项目中的AFNetorking - “错误:请求失败:不可接受的内容类型:text / html”

时间:2014-10-16 15:47:10

标签: ios api swift afnetworking

我正在使用CocoaPods将AFNetworking实现到Swift项目中。我习惯用Ruby编程,我对iOS开发很新。 Cocoapods在我的项目中正常工作很棘手但我现在可以成功访问AFNetworking库。

我要做的是点击一个带有POST的表单并获得一个我可以解析的“text / html”响应,以便我可以判断它是否保存。这不是API本身,而是InfusionSoft生成的表单。用户将输入一个电子邮件地址,我会将其发送到API进行存储。这是我正在使用的代码:

let manager = AFHTTPRequestOperationManager()
            var parameters = ["inf_form_xid": "MY_ACCESS_ID",
                      "inf_form_name": "Webform in Content App",
                      "infusionsoft_version": "1.34.0.35",
                      "inf_field_email": self.emailTextField.text]

    manager.POST( "https://ns166.infusionsoft.com/app/form/process/REALLYLONGUNIQUEID",
    parameters: parameters,
    success: { (operation: AFHTTPRequestOperation!,responseObject: AnyObject!) in
        println("JSON: " + responseObject.description)
    },
    failure: { (operation: AFHTTPRequestOperation!,error: NSError!) in
        println("Error: " + error.localizedDescription)
    })

我收到的错误是AFNetworking的回复:

Error: Request failed: unacceptable content-type: text/html

在一天结束时,我想在我允许用户继续使用应用程序之前验证它是否已由服务器保存。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

您必须添加响应允许的内容类型。

你可以为json内容做到这一点:

 manager.responseSerializer.acceptableContentTypes = NSSet(objects: "application/json")

修改

如果您使用的是AFNetworking 2.0,请AFNetworking wiki

“默认情况下,AFHTTPRequestOperationManager和AFHTTPSessionManager都有JSON序列化程序。”

因此,您应该尝试更改管理器中的响应序列化器,如下所示:

manager.responseSerializer = AFHTTPResponseSerializer()

答案 1 :(得分:0)

这意味着您的服务器正在发送“text / html”而不是已经支持的类型。您可以将可接受的内容类型添加为“text / html”,或者确保从服务器端正确发送json格式。通过默认情况下,afnetworking的内容类型是目标c中的json。不了解swift。 参考:Request failed: unacceptable content-type: text/html using AFNetworking 2.0

答案 2 :(得分:0)

我不确定快速,但在目标c中,在寻找答案后,我遇到了对我来说非常好的解决方案。 以下是代码段:

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;