iOS-Alamofire v2 Basic Auth no funciona
swift swift2 (3)
Así que estoy enviando una solicitud de autenticación básica a Bing Image Search para obtener algunos datos de imagen, y funcionó de maravilla, justo hasta que actualicé a la última versión de Alamofire (1.3 -> 2.0.2), lo que tuve que hacer porque 1.3 ni siquiera estaba cerca de ser compatible con XCode 7.
De todos modos, aquí está mi código:
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
...
Y obtengo el error:
FALLO: dominio de error = NSCocoaErrorDomain Code = 3840 "Valor no válido alrededor del carácter 0." UserInfo = {NSDebugDescription = Valor no válido alrededor del carácter 0.} No se admite el tipo de autorización que proporcionó. Solo Basic y OAuth son compatibles
La primera parte del error se debe a que no recibes JSON válidos en la respuesta. Puede usar response
, responseData
o responseString
para ayudar a depurar.
La segunda parte del error se debe a cómo está configurando el encabezado. No puede establecer un encabezado de Authorization
después de que se haya creado la configuración de la sesión. Puede crear su propia configuración de sesión y su propio Manager
, o puede pasar el encabezado de Authorization
en la request
.
Tuve el mismo problema al pasar de Alamofire 1.xa 2.x.
Una solución alternativa que encontré (y que funciona) es pasar los encabezados al realizar la solicitud:
let headers = ["Authorization": "Basic /(base64)"]
Alamofire.request(.POST, url, parameters: nil, encoding: .JSON, headers: headers)
Para obtener más información, puede echar un vistazo a la documentación .
lea aquí http://ste.vn/2015/06/10/configuring-app-transport-security-ios-9-osx-10-11/ "App Transport Security (ATS) permite que una aplicación agregue una declaración a su Archivo Info.plist que especifica los dominios con los que necesita una comunicación segura. ATS evita la divulgación accidental, proporciona un comportamiento predeterminado seguro y es fácil de adoptar. Debe adoptar ATS lo antes posible, independientemente de si está creando una nueva aplicación. o actualizando uno existente ".