2015-08-21 3 views
2

Я следую этому отвечу за вызовы HTTP в моем быстром проекте. How to make an HTTP request in Swift?Получение ответа заголовка в Swift

и Ниже приведен код, я использую, чтобы сделать синхронный вызов

let urlPath: String = "http://agentreview.net/api/login/?username=asdf&password=asdf" 
      var url: NSURL = NSURL(string: urlPath)! 
      var request1: NSURLRequest = NSURLRequest(URL: url) 

      var response: AutoreleasingUnsafeMutablePointer<NSURLResponse?> = nil 

      var error: NSErrorPointer = nil 
      var dataVal: NSData = NSURLConnection.sendSynchronousRequest(request1, returningResponse: response, error:nil)! 
      var err: NSError 

      println("response -- \(response)") 
      var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(dataVal, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary 

      println("Synchronous \(jsonResult)") 

здесь, кто может помочь мне получить HTTP-заголовок ответа или код состояния с помощью этого кода? пожалуйста

ответ

6

Попробуйте это:

func getData(url: NSURL) { 
    let config: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration() 
    let session: NSURLSession = NSURLSession(configuration: config) 

    let dataTask: NSURLSessionDataTask = NSURLSession.sharedSession().dataTaskWithURL(url, completionHandler: {(data: NSData!, urlResponse: NSURLResponse!, error: NSError!) -> Void in 

     if let httpUrlResponse = urlResponse as? NSHTTPURLResponse 
     { 
      if error { 
       println("Error Occurred: \(error.localizedDescription)") 
      } else { 
       println("\(httpUrlResponse.allHeaderFields)") // Error 
      } 
     } 
     }) 

     dataTask.resume() 
    } 
+0

Я уже пробовал это. получив предупреждение. Это говорит, что «Cast from AutoreleasingUnsafeMutablePointer Для несвязанного типа NSHTTPURLResponse всегда терпит неудачу». –

+0

стр. см. отредактированный ответ – iAnurag

+0

Я получил этот ответ сейчас: [Keep-Alive: timeout = 5, max = 100, Истекает: Чт, 19 ноября 1981 г. 08:52:00 GMT, Перенос кодов: Идентификация, Сервер: Apache/2.4 .12 (Unix) OpenSSL/1.0.1e-fips mod_bwlimited/1.4, Content-Type: text/html, Connection: Keep-Alive, Pragma: no-cache, Cache-Control: no-store, no-cache, must- revalidate, post-check = 0, .......................................... ............ Нет Код состояния. –

1

За свой код в исходный вопрос, вы пробовали это?

let urlPath: String = "http://agentreview.net/api/login/?username=asdf&password=asdf" 
var url: NSURL = NSURL(string: urlPath)! 
var request1: NSURLRequest = NSURLRequest(URL: url) 

var response: NSURLResponse? = nil 

var error: NSError? = nil 
var dataVal: NSData = NSURLConnection.sendSynchronousRequest(request1, returningResponse: &response, error:&error)! 
var err: NSError 

println("response -- \(response)") 
if let response = response as? NSHTTPURLResponse { 
    if response.statusCode == 200 { 
     print("Success") 
    } 
} 
var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(dataVal, options: NSJSONReadingOptions.MutableContainers, error: nil) as! NSDictionary 

println("Synchronous \(jsonResult)") 
+0

Я пробовал это, но на успех я получил statusCode = 200, но когда он терпит неудачу, он возвращает nil .... любое предложение.? –

+0

Я обновил ответ, чтобы использовать 'error' в' sendSynchronousRequest (_: returnResponse: error:) '. Поместите контрольную точку после отправки запроса, чтобы узнать, почему он не работает. Например, если запрос терпит неудачу из-за плохого пароля, тогда в 'error' есть информация, чтобы идентифицировать эту проблему. –

Смежные вопросы