Могу ли я проверить достижимость конечной точки URL-адреса HTTP-сервера с помощью Alamofire? - PullRequest
0 голосов
/ 29 октября 2019

У меня есть приложение для iPad, написанное на Swift, которое связывается с нашим HTTP-сервером через REST API, и мне нужно добавить прослушиватель для двух типов событий: приложение HTTP-сервера не работает (502 503 504) и приложение HTTP-сервера снова включено (2xx, 3xx, 4xx).

Сейчас я использую NetworkReachabilityManager Alamofire, с помощью которого я могу настроить слушателя на события, такие как сеть недоступна и сеть снова доступна ,Я даже могу разместить там хост на нашем сервере через вызов конструктора NetworkReachabilityManager(host: "www.ourserver.com"), но он на самом деле не делает то, что я точно хочу. Он только выясняет, доступен ли IP-адрес, на который маршрутизируются хосты (ping).

class NetworkReachabilitySubject {

    private let manager = NetworkReachabilityManager(host: "www.ourserver.com")
    private var observers : [NetworkReachabilityObserver] : []

    // MARK: - Methods

    func startListening() {
        manager?.listener = { status in
            for observer in self.observers {
                observer.networkStatusChanged(currentStatus: status)
            }
        }
        manager?.startListening()
    }

}

Мне нужно пойти немного дальше и управлять, когда серверное приложение выключено / не включено, а нетолько когда host выключен / включен. Для этих целей я создал специальную конечную точку HTTP http://www.ourserver.com/isalive, которую можно использовать для определения, не работает приложение сервера или нет. Есть ли способ в Alamofire или другой библиотеке, чтобы решить эту проблему? В идеале что-то вроде HttpServerAppReachabilityManager(endpoint: "http://www.ourserver.com/isalive"), которое делает то же самое, что и NetworkReachabilityManager Alamofire, но кроме того, оно также может управлять достижимостью конечной точки URL-адреса?

Ответы [ 2 ]

0 голосов
/ 29 октября 2019

Не стоит беспокоиться о «достижимости». Просто попытайтесь выполнить сетевую задачу. Если это проблема с сетью, вы получите ответ об ошибке, и вы можете потерпеть неудачу в хорошем порядке.

0 голосов
/ 29 октября 2019

С помощью этого крошечного фрагмента вы можете проверить код состояния HTTP:

let defaultSession = URLSession(configuration: .default)
var dataTask: URLSessionDataTask?

 dataTask = 
    defaultSession.dataTask(with: url) { [weak self] data, response, error in 
    defer {
      self?.dataTask = nil
    }
    let httpResponsStatusCode = (response as? HTTPURLResponse)?.statusCode
    // Now check the status code
  }
  dataTask?.resume()
...