Swift 项目中的 AFNetorking ——“错误:请求失败:不可接受的内容类型:文本/html”
Posted
技术标签:
【中文标题】Swift 项目中的 AFNetorking ——“错误:请求失败:不可接受的内容类型:文本/html”【英文标题】:AFNetorking in Swift project -- "Error: Request failed: unacceptable content-type: text/html" 【发布时间】:2014-10-16 15:47:09 【问题描述】:我正在将 AFNetworking 与 CocoaPods 实现到一个 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
最后,我想在允许用户继续使用应用程序之前验证它是否已被服务器保存。
非常感谢任何帮助。
【问题讨论】:
Request failed: unacceptable content-type: text/html using AFNetworking 2.0 的可能重复项 @mattt 谢谢,但我正在寻找 Swift 而不是 OBJ-C 的东西 还是同一个问题。使用的语言并不是那么重要。这确实是 AFNetworking 的 API 的问题。 @mattt 但我仍然遇到我期望来自 POST 请求的文本/html 但 AFNetworking 说这是不可接受的问题。我需要添加 text/html 为可接受的 【参考方案1】:您必须为响应添加允许的内容类型。
你可以为 json 内容做到这一点:
manager.responseSerializer.acceptableContentTypes = NSSet(objects: "application/json")
编辑
如果您使用的是 AFNetworking 2.0,来自AFNetworking wiki:
“默认情况下,AFHTTPRequestOperationManager 和 AFHTTPSessionManager 有 JSON 序列化器。”
因此,您或许应该尝试像这样更改管理器中的响应序列化程序:
manager.responseSerializer = AFHTTPResponseSerializer()
【讨论】:
我期待 text/html 作为响应。如果我使用您的建议,但将“application/json”换成“text/html”,它仍然无法正常工作。我实际上得到了一个不同的错误错误:无法完成操作。 (可可错误 3840。) 此错误表示您的响应内容格式不正确。例如在 JSON 中,如果 JSON 无效,您将收到此错误。那么你能用你期望的响应内容来编辑你的问题吗? 当我向 manager.responseSerializer 提出您的建议时,我收到了以下回复: 检查您的标头响应,是否有charset
标头?如果没有尝试添加它:charset=UTF-8
.
或尝试在您的成功回复中执行此操作:println((NSString(data: responseObject, encoding: NSUTF8StringEncoding)))
【参考方案2】:
这意味着您的服务器正在发送“text/html”而不是已经支持的类型。您可以将可接受的内容类型添加为“text/html”或确保您从服务器端正确发送 json 格式。通过默认情况下,afnetworking 的内容类型是目标 c 中的 json。不知道 swift。 参考:Request failed: unacceptable content-type: text/html using AFNetworking 2.0
【讨论】:
我期待文本/html。不幸的是,AFNetworking 期待 JSON 并且正在等待响应。【参考方案3】:我不确定 swift 但在目标 c 中,在搜索答案后,我遇到了对我非常有效的解决方案。 下面是代码sn-p:
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;
【讨论】:
以上是关于Swift 项目中的 AFNetorking ——“错误:请求失败:不可接受的内容类型:文本/html”的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 项目中使用 Objective C 类中的 Swift 类
在 Swift 项目中使用 Objective C 类中的 Swift 类
目标 C 项目中的 Xcode 8.3 Swift 版本错误 (SWIFT_VERSION)