Я попробовал Alamofire связаться с моим серверным API для получения данных JSON. В моем API используется дайджест-проверка подлинности, но у меня изначально были проблемы с сервером, и мне удалось их преодолеть с помощью приведенного ниже кода.
let userNameValue = "username"
let passwordValue = "password"
let credential = URLCredential(user: userNameValue, password: passwordValue, persistence: .forSession)
let sessionMananager = Alamofire.SessionManager.default
let request = sessionMananager.request("http://httpbin.org/basic-auth/\(userNameValue)/\(passwordValue)")
.authenticate(usingCredential: credential)
.responseJSON { response in
print("Response: \(String(describing: response.response))") // http url response
print("Result: \(response.result)") // response serialization result
}
Результат выглядел как
Response:
{ Status Code: 500, Headers {
Connection = (
close
);
"Content-Length" = (
0
);
"Content-Type" = (
"text/html; charset=UTF-8"
);
} }
Result: FAILURE
После некоторого поиска я изменил .responseJSON на .responseString, и результат изменился, как показано ниже
Response:
{ Status Code: 500, Headers {
Connection = (
close
);
"Content-Length" = (
0
);
"Content-Type" = (
"text/html; charset=UTF-8"
);
} }
Result: SUCCESS
Чтобы убедиться, что проблема обработана, я ввел неправильный пароль и попробовал с .responseString, он дал результат с кодом состояния: 401.
Требуются предложения
Чтобы получить данные из API,
Даже если код состояния: 500 - внутренняя ошибка, я не думаю, что это проблема сервера.
Я так сделал:
let sessionMananager = Alamofire.SessionManager.default
let credential = URLCredential(user: "bruce", password: "dickinson", persistence: .forSession)
sessionMananager.request("https://httpbin.org/digest-auth/undefined/bruce/dickinson")
.authenticate(usingCredential: credential)
.responseJSON { response in
print("Result: \(String(describing: response.response?.statusCode))")
print(response.result)
print(response.description)
}
Странно, что в вашем коде написано «basic-auth», а вы говорите о Digest auth. Вы можете это проверить?