URLSession avec configuration

Bonjour à tous !

J’essaie de récupérer un fichier depuis une url protégé par une authentification basic (login + mot de passe)

Je n’arrive pas à effectuer cette requête en swift, j’ai réussi en Java pourtant…

Voici mon code en swift qui ne marche pas :frowning:

let url = URL(string: "www.myurl.com")!
let login = "login:mdp"
let userPasswordData = login.data(using: String.Encoding.utf8)
let base64EncodedCredential : String = (userPasswordData?.base64EncodedString())!
let authString = "Basic " + "\(base64EncodedCredential)"      

    let config : URLSessionConfiguration = URLSessionConfiguration.default
    config.httpAdditionalHeaders = ["Authorization": authString]
    let session : URLSession = URLSession(configuration: config)

let task = session.dataTask(with: url) {
          (data,  response, error) in
            if let httpResponse = response as? HTTPURLResponse {
                let dataString = NSString(data: data!, encoding: String.Encoding.utf8.rawValue)
                print(dataString)
            }
        }

Et j’obtiens malgré tout une erreur de type :

401 Unauthorized
This server could not verify that you
are authorized to access the document
requested. Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn’t understand how to supply
the credentials required.

J’ai beau lire la doc d’apple je ne m’en sort pas :confused:

Si quelqu’un voit ou est l’erreur …

Merci d’avance !

Pour les opérations réseau, il est souvent plus simple de passer par Alamofire, surtout dès que tu utilises de l’authentification, de l’upload, etc.
Par exemple dans ton cas voici le lien direct : https://github.com/Alamofire/Alamofire#authentication

Merci en effet l’utilisation d’Alamofire m’a permis de debugger plus facilement!

Le problème venait du fait que depuis iOS 9 Apple à désactivé tout le trafic HTTP non sécurisé provenant d’application iOS.

Pour résoudre le problème il faut ajouter les lignes suivantes à votre fichier info.plist

<key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

Cependant cela me laisse perplexe quand à la validation de mon app par Apple, qu’en pensez vous ?

Tu n’as pas moyen de passer en https sur ton serveur ? Il y a des certificats gratuits maintenant avec let’s encrypt

Ce n’est malheureusement pas mon serveur.
De plus le serveur en question est déjà en https mais le certificat est expiré…

Tu penses que cela peut poser problème lors de la validation de l’application par Apple ?

Au départ ils avaient prévu de les interdire à partir du premier janvier 2017 mais ils ont décidé d’étendre la période de grâce :

C’est donc accepté pour le moment et ils nous préviendront dès qu’il y aura des changements

Je crois que pour le moments sa fonctionne.:cold_sweat:
J’ai quelque app qui utilise NSAppTransportSecurity et tous on été
accepté par applestore. Le dernier remonte à une dizaine de jours…