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

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

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

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

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

有关更多信息,您可以查看文档 。

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

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

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