Erreur connexion API
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:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
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...
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.
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
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...