所以我向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
答案 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。您可以使用response
,responseData
或responseString
来帮助调试。
错误的第二部分是由于您设置标头的方式。在创建会话配置后,您无法设置Authorization
标头。您可以创建自己的会话配置和自己的Manager
,也可以在Authorization
中传递request
标题。