#swift #postman #alamofire
#swift #postman #alamofire
Вопрос:
Я столкнулся с очень странной проблемой при вызове RESTful API. У меня есть API входа в систему, я протестировал его в Postman, и он работает отлично. Вот скриншот.
Но как только я вызываю его с помощью Alamofire, я получаю ответ as "status :" 1
, и "message" : 'Incorrect Credentials'
это тот же адрес электронной почты и пароль, которые я использую в postman, но я все равно получаю этот ответ, даже если мой адрес электронной почты и пароль верны. Я протестировал его на нескольких электронных письмах и паролях, и для каждого пользователя он выдает одну и ту же ошибку.
Вот моя функция входа в систему..
public func login(email: String, password: String, success: @escaping (UserData) -> (), failure: errorClosure)
{
let parameters: Parameters = [
"email": "(email)",
"password": "(password)"
]
session.request(Config.loginURL, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON
{ response in
switch response.result
{
case .success(_):
let json = response.value
print("JSON: (json ?? "errr")")
MappingHelper.ModelFromResponse(UserData.self, response: response, success: { (result) in
success(result)
}, failure: failure)
case .failure(let error):
failure?(error)
}
}
}
Вот как я это называю..
helper.login(email: email, password: password) { (UserData) in
print(UserData)
} failure: { (error) in
print(error)
}
Отладка..
Причина, по которой я использую session.request
вместо AF.request
, заключается в том, что когда я использую AF.request, он выдает мне ошибку сертификата.
Сертификат для этого сервера недействителен. Возможно, вы подключаетесь к серверу, который выдает себя за «ДОМЕННОЕ ИМЯ», что может подвергнуть риску вашу конфиденциальную информацию.
Поэтому, чтобы обойти эту ошибку, я создал сеанс с помощью некоторого ответа от SO.
private let session: Session = {
let manager = ServerTrustManager(evaluators: ["******.com": DisabledTrustEvaluator()])
let configuration = URLSessionConfiguration.af.default
return Session(configuration: configuration, serverTrustManager: manager)
}()
Ответ №1:
Я думаю, ошибка заключается JSONEncoding.default
в том, что вы не хотите отправлять тело JSON в соответствии с вашим скриншотом Postman. Вы захотите использовать URL-форму, закодированную, как определено здесь
Комментарии:
1. хорошо, позвольте мне пройти через это. Спасибо за ваш ответ 🙂
2. БОЖЕ! Это сработало! Большое вам спасибо @Leslie Alldridge. Очень признателен.
3. Пожалуйста, я никогда раньше не писал swift и не использовал эту библиотеку, но я прочитал много технической документации для различных библиотек API 🙂 рад, что это помогло!
4. Да, так и было: D Еще раз спасибо! Ваше здоровье.