iOS - Alamofire v2 Basic Auth无法正常工作

时间:2015-09-21 06:19:55

标签: ios swift swift2 basic-authentication alamofire

所以我向Bing Image Search发送一个基本身份验证请求以获取一些图像数据,并且它工作得很好,直到我更新到最新版本的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
      ...

我收到了错误:

  

FAILURE:Error Domain = NSCocoaErrorDomain Code = 3840"字符0周围的值无效。" UserInfo = {NSDebugDescription =字符0周围的值无效}   不支持您提供的授权类型。仅支持Basic和OAuth

3 个答案:

答案 0 :(得分:2)

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

我发现(并且有效)的一个解决方法是在执行请求时传递标题:

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

有关详细信息,请查看documentation

答案 1 :(得分:0)

请在这里阅读http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/ “App Transport Security(ATS)允许应用程序在其Info.plist文件中添加一个声明,指定与其进行安全通信的域.ATS防止意外泄露,提供安全的默认行为,并且易于采用。您应该采用ATS尽快,无论您是创建新应用还是更新现有应用。“

答案 2 :(得分:0)

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

错误的第二部分是由于您设置标头的方式。在创建会话配置后,您无法设置Authorization标头。您可以创建自己的会话配置和自己的Manager,也可以在Authorization中传递request标题。