ios swift swift2 basic-authentication alamofire

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 ".