ios - Cómo comprobar Response.statusCode en sendSynchronousRequest en Swift
nsurlconnection nsurlrequest (6)
Cómo comprobar response.statusCode en SendSynchronousRequest en Swift El código está a continuación:
let urlPath: String = "URL_IS_HERE"
var url: NSURL = NSURL(string: urlPath)
var request: NSURLRequest = NSURLRequest(URL: url)
var response: AutoreleasingUnsafeMutablePointer<NSURLResponse?> = nil
var error: NSErrorPointer? = nil
var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: response, error: nil) as NSData?
antes y en el objetivo c, verificamos response.statusCode con esto: (long) response.statusCode pero en swift no tengo idea de cómo puedo verificar el estado de la respuesta Code
Limpiar para Swift 2.0 usando NSURLSession
let urlPath: String = "http://www.google.de"
let url: NSURL = NSURL(string: urlPath)!
let request: NSURLRequest = NSURLRequest(URL: url)
var response: NSURLResponse?
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request) {urlData, response, reponseError in
if let httpResponse = response as? NSHTTPURLResponse {
print("error /(httpResponse.statusCode)")
}
}
task.resume()
//You should not write any code after `task.resume()`
Si usa la biblioteca Just sería tan simple como:
Just.get("URL_IS_HERE").statusCode
Swift 3 versión para @GarySabo respuesta:
let url = URL(string: "https://apple.com")!
let request = URLRequest(url: url)
let task = URLSession.shared().dataTask(with: request) {data, response, error in
if let httpResponse = response as? HTTPURLResponse {
print("statusCode: /(httpResponse.statusCode)")
}
}
task.resume()
Utilizo una extensión para URLResponse para simplificar esta (Swift 3):
extension URLResponse {
func getStatusCode() -> Int? {
if let httpResponse = self as? HTTPURLResponse {
return httpResponse.statusCode
}
return nil
}
}
usted pasa una referencia a la respuesta para que se complete ENTONCES usted verifica el resultado y lo envía a una respuesta HTTP, ya que solo las respuestas http declaran la propiedad del código de estado.
let urlPath: String = "http://www.google.de"
var url: NSURL = NSURL(string: urlPath)
var request: NSURLRequest = NSURLRequest(URL: url)
var response: NSURLResponse?
var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: nil) as NSData?
if let httpResponse = response as? NSHTTPURLResponse {
println("error /(httpResponse.statusCode)")
}
nota: en objC también usaría el mismo enfoque, pero si usa corchetes cuadrados, el compilador no aplica el reparto. Swift (al ser seguro) hace cumplir el elenco siempre
Swift 3+
let dataURL = "https://myurl.com"
var request = URLRequest(url: URL(string: dataURL)!)
request.addValue("Bearer /(myToken)", forHTTPHeaderField: "Authorization")
URLSession.shared.dataTask(with: request) { (data, response, error) in
// Check if the response has an error
if error != nil{
print("Error /(String(describing: error))")
return
}
if let httpResponse = response as? HTTPURLResponse{
if httpResponse.statusCode == 401{
print("Refresh token...")
return
}
}
// Get data success
}.resume()