Ответ RestAPI отличается от ответа Postman

#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 Еще раз спасибо! Ваше здоровье.