web-dev-qa-db-fra.com

Comment tester une URL et obtenir un code de statut dans Swift 3?

J'utilise la version la plus récente de Xcode (8.1 au moment de l'écriture), qui utilise Swift 3.0.

Tout ce que j'essaie de faire est de prendre une chaîne, de la convertir en une URL et de tester cette URL pour voir si elle me donne une erreur 404. J'ai pu créer une URL et une URLRequest en utilisant:

    let url = URL(string: fullURL)
    let request = URLRequest(url: url!)

mais je me suis retrouvé incapable de faire fonctionner quoi que ce soit au-delà. J'ai cherché de l'aide, mais la plupart, sinon la totalité, est écrite en Swift 2.0, que j'ai essayé de convertir en vain. Il semble que même si vous modifiez la convention de dénomination pour supprimer le préfixe NS, cela ne suffit pas. J'ai essayé d'utiliser:

    let response: AutoreleasingUnsafeMutablePointer<URLRequest> = nil

mais cela me donne une erreur que "solutionner-le" aggrave en collant des points d'interrogation et des points-virgules partout.

La documentation d'Apple ne m'aide pas beaucoup non plus. Je suis sérieusement perdue.

Quelqu'un sait-il comment configurer et tester correctement une URL pour le statut 404 dans Swift 3.0?

6
DisturbedNeo

essayez ceci pour vous donner les codes de statut des réponses - 200, 404 etc.:

let url = URL(string: fullURL)

let task = URLSession.shared.dataTask(with: url!) { _, response, _ in
    if let httpResponse = response as? HTTPURLResponse {
        print(httpResponse.statusCode)
    }
}

task.resume()

Vous pouvez également faire la même chose, en remplaçant simplement le with: url! pour utiliser la variable request telle que définie dans votre exemple, par exemple. let task = URLSession.shared.dataTask(with: request) {...} Mais dans cet exemple, je ne pense pas que vous deviez vraiment.

10
Matt Le Fleur

Exemple simple:

    let url = // whatever
    let session = URLSession.shared
    let task = session.downloadTask(with:url) { loc, resp, err in
        let status = (resp as! HTTPURLResponse).statusCode
        print("response status: \(status)")
    }
    task.resume()
7
matt

Voici un autre exemple de la méthode delegate

public func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didBecome downloadTask: URLSessionDownloadTask){

let responseStatusCode = (dataTask.response as! HTTPURLResponse).statusCode
}

Voici l'exemple https://github.com/ankitthakur/SwiftNetwork/blob/master/Sources/Shared/SwiftNetwork.Swift

2
Ankit Thakur