Erreur connexion API

Luc-ALuc-A Membre

Bonjour à tous !

Lorsque je me connecte à mon API (que j'ai créé avec PHP), j'obtiens l'erreur suivante :
HTTP load failed (error code: 53

Voici les fonctions que j'utilise pour me connecter :

func APIRequest<T>(data: T?, response: URLResponse?, error: Error?) throws -> T {
    if let error = error { throw error }
    guard let response = response as? HTTPURLResponse else { throw ServerRequestError.badRequest }
    let statusCode = response.statusCode
    guard statusCode == 200 else { throw ServerRequestError.serverError(code: statusCode) }
    guard let data = data else { throw ServerRequestError.noData }
    return data
}

func APIRequestPost(url: APIurl, postString: String, completion: @escaping (Data) -> ()) {
    var request = URLRequest(url: URL(string: url.rawValue)!)
    request.cachePolicy = .reloadIgnoringLocalCacheData
    request.httpMethod = "POST"
    request.httpBody = postString.data(using: String.Encoding.utf8)

    let requestAPI = URLSession.shared.dataTask(with: request) { data, response, error in
        do {
            let resultRequest = try self.APIRequest(data: data, response: response, error: error)
            completion(resultRequest)
        } catch {
            NSLog(error.localizedDescription)
            print(url)
            print(error.localizedDescription)
        }
    }
    requestAPI.resume()
}

Et voici la fonctions qui me permet de récupérer les rendez-vous :

func getNewAppointment() {
    guard AppDelegate.customer != nil else { return }
    //var newAppointments: [[String:Any]] = []

    serverRequest.APIRequestGot(url: "monfichier.json", completion: { (newAppointments: [[String:Any]]) in
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
            guard newAppointments.count > 0 else { return }
            self.badgesAppointments = newAppointments.count
            let dataBase = DataBase()
            for newAppointment in newAppointments {
                let appointment: NewAppointment = NewAppointment.init(dictionary: newAppointment)!
                let predicate: String = "id == \(appointment.idTogether) AND idArtisan == \(appointment.idArtisan)"
                var appointments: [Appointment] = []
                dataBase.getAppointment(predicatFormat: predicate, completion: { result in
                    appointments = result
                })
                print("idTogether : \(appointment.idTogether)")
                if appointments.count > 0 {
                    var archive: Bool = true
                    var newState: Int32 = appointment.state
                    if appointment.state == 3 {
                        newState = 2
                        archive = false
                    }
                    dataBase.updateAppointment(predicatFormat: predicate, comment: appointment.comment, price: appointment.price, date: appointment.schelude, state: newState, archive: archive)
                } else {
                    var idAppointment: Int32 = 1
                    dataBase.getLastIdAppointment(idArtisan: appointment.idArtisan, completion: { result in
                        idAppointment = result
                    })
                    dataBase.addAppointment(id: appointment.idTogether, idChat: appointment.idChat, idArtisan: appointment.idArtisan, comment: appointment.comment, price: appointment.price, address: appointment.address, date: appointment.schelude, service: appointment.service, state: Int32(2), archive: false)

                    if idAppointment < appointment.idTogether {
                        dataBase.updateIdAppointment(idArtisan: Int32(appointment.idArtisan), id: appointment.idTogether)
                    }
                }
            }
            switch AppDelegate.viewController {
            case "OrganizerViewController":
                break
            case "AppointmentViewController":
                let appointmentViewController = AppointmentViewController()
                if AppDelegate.idTogether != appointmentViewController.idTogether {
                    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "updateBadgesAppointments"), object: nil)
                } else {
                    NotificationCenter.default.post(name: NSNotification.Name(rawValue: "reloadAppointment"), object: nil)
                }
                break
            default:
                NotificationCenter.default.post(name: NSNotification.Name(rawValue: "updateBadgesAppointments"), object: nil)
                break
            }
            NotificationCenter.default.post(name: NSNotification.Name(rawValue: "loadAppointments"), object: nil)

        }
    })
    self.updateBadge(type: "A")
}

Je vous remercie pour votre aide !

Mots clés:

Réponses

  • PyrohPyroh Membre

    Tu dois avoir un framework pour construire ton API côté backend. Tu dois sûrement trouver dans la doc à quoi correspond l'erreur 53...

  • Luc-ALuc-A Membre

    Bonjour Pyroh !
    Je te remercie pour ton aide !
    Malheureusement, il n'y a pas de doc avec l'API, car je l'ai fait moi-même avec PHP.
    Apparemment, l'erreur provient de la clé NSAppTransportSecurity qui est mal configuré dans mon info.plist.
    Le problème est que j'ai n'ai jamais entendu parlé de cette clé...
    Je vais continuer à chercher, et j'espère pouvoir résoudre cette erreur.

  • PyrohPyroh Membre

    C'est parce que tu utilise un backend en HTTP.
    Maintenant tu dois toujours utiliser un backend en HTTPS tu vas trouver de quoi t'aider sur le net.
    Comme ici par exemple

  • Luc-ALuc-A Membre

    Pyroh, je te remercie beaucoup pour le lien !!
    Désolé, mais je travaille seul, et mon vocabulaire est limité. Donc ne le prend pas mal si je dis une grosse bêtise !!
    En fait, j'ai hébergé l'API sur mon site, qui est bien en HTTPS !
    J'ai vérifié mon AppDelegate, et je me suis rendu compte de mon erreur : j'ai appelé les fonctions qui récupèrent les données (à partir de fichiers JSON) dans la fonction didReceiveRemoteNotification...

Connectez-vous ou Inscrivez-vous pour répondre.