iOS - Alamofire v2基本身份验证无法正常工作

3
我将发送一个基本身份验证请求到Bing图像搜索以获取一些图片数据,之前一切正常,直到我升级到最新版本的Alamofire(1.3 -> 2.0.2),因为1.3与Xcode 7根本不兼容。以下是我的代码:
let credentials = ":\(Settings.bingApiKey)"
let plainText = credentials.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
let base64 = plainText!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))

manager = Alamofire.Manager.sharedInstance
manager!.session.configuration.HTTPAdditionalHeaders = [
    "Authorization": "Basic \(base64)"
]

let url = NSURL(string: Settings.bingImageApi + "&Query=" + keyword + "&$top=15&$skip=" + String(skip))!

manager!
  .request(.POST, url, parameters: nil, encoding: .JSON)
  .responseJSON { request, response, result in
      ...

我遇到了以下错误:

失败:错误域=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.} 您提供的授权类型不受支持。只有Basic和OAuth受支持。

3个回答

2

当我从Alamofire 1.x转移到2.x时,遇到了同样的问题。

我找到了一个解决方法(并且它有效),就是在执行请求时传递头文件:

let headers = ["Authorization": "Basic \(base64)"]
Alamofire.request(.POST, url, parameters: nil, encoding: .JSON, headers: headers)

如需更多信息,您可以查看文档


感谢您的帮助!运行得非常好。 - Ryan Bobrowski

0
请阅读此处http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/。 "应用程序传输安全性(ATS)允许应用程序向其Info.plist文件添加声明,指定需要进行安全通信的域。ATS可以防止意外泄露,提供安全的默认行为,并且易于采用。无论您是创建新应用程序还是更新现有应用程序,都应尽快采用ATS。"

0

错误的第一部分是由于您在响应中没有收到有效的JSON。您可以使用responseresponseDataresponseString来帮助调试。

错误的第二部分是由于您设置头文件的方式不正确。在会话配置创建后,您不能设置Authorization头文件。您可以创建自己的会话配置和自己的Manager,或者您可以在request中传递Authorization头文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接