При подключении к серверу через HTTPS иногда возникает ошибка DNS (невозможно преобразовать домен в IP-адрес).
Я хочу обработать эту ошибку и переподключиться к серверу напрямую черезIP.
Проблема в том, что когда я подключаюсь по IP, я получаю сообщение об ошибке, подобное:
Ошибка домена = NSURLErrorDomain Code = -1202 "Сертификат для этого сервера недействителен.Вы можете быть «12.456.789.12», что может быть вашей информацией.
И да, на сервере есть сертификат, но он привязан к имени домена!
Iесть аналогичное приложение для Android, и там решена эта проблема путем отдельного добавления верификатора домена:
connection.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
HostnameVerifier hv = HttpsURLConnection.getDefaultHostnameVerifier();
return hv.verify("example.com", session);
}
});
Можно ли подключиться к серверу по IP и избежать проблемы с сертификатом (например, так как онбыло сделано в приложении для Android)?
Мой код:
let url = URL(string: "https://example.com/api/")
URLSession.shared.dataTask(with: url) { (data, response, error) in
// Reconnect by IP
if let value = error as NSError?, value.domain == NSURLErrorDomain {
let url = URL(string: "https://12.456.789.12:443/api/")
URLSession.shared.dataTask(with: url) { (data, response, error) in
// TODO: Processing data received from the server
}.resume()
// TODO: Processing data received from the server
}.resume()