Alamofire Эквивалент Почтальона GET запрос - PullRequest
0 голосов
/ 20 апреля 2020

Я работаю над приложением iOS, в котором я использую «Alamofire» для создания запроса API, я тестирую API (созданный с помощью Slim Framework) почтальоном, но я не смог получить эквивалентный запрос почтальона от Alamofire.

Почтальон запрос, как показано ниже: enter image description here

, и я пытаюсь Alamofire, как показано ниже:

  let parm = ["Password_Father": "test", "Username_Father": "test"]
        let headers :  HTTPHeaders = ["content-type": "application/json"]
        AF.request(URL(string: "http://my.domain.com/page1/login")!,
                   method: .get, // also try it as post but get error 500 as postman when using post method
                   parameters:parm,
                   encoding: JSONEncoding.default,
                   headers: headers)
            .validate(statusCode: 200..<300)
            .responseJSON { response in
                switch response.result
                {
                case .success(_) :do {
                    print("success")
                    }
                case .failure(let error):
                    print("failure(error)",error)

                    break
                }
        }

, но я получаю эту ошибку failure(error) urlRequestValidationFailed(reason: Alamofire.AFError.URLRequestValidationFailureReason.bodyDataInGETRequest)

Как я могу получить эквивалентный запрос почтальона от Alamofire.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Как вы указали в своем вопросе, вы делаете запрос "GET".

Запросы GET не могут иметь тела сообщения. Но вы все равно можете отправлять данные на сервер, используя параметры URL. В этом случае вы ограничены максимальным размером URL-адреса, который составляет около 2000 символов.

Одним из способов решения этой проблемы является использование URLEncoding.default в качестве encoding в запросе.

Ваш запрос должен быть следующим:

let parm = ["Password_Father": "test", "Username_Father": "test"]
        let headers :  HTTPHeaders = ["content-type": "application/json"]
        AF.request(URL(string: "http://my.domain.com/page1/login")!,
                   method: .get,
                   parameters:parm,
                   encoding: URLEncoding.default,
                   headers: headers)
            .validate(statusCode: 200..<300)
            .responseJSON { response in
                switch response.result
                {
                case .success(_) :do {
                    print("success")
                    }
                case .failure(let error):
                    print("failure(error)",error)

                    break
                }
        }

Это должно работать. Если вы столкнулись с проблемой, пожалуйста, не стесняйтесь комментировать.

0 голосов
/ 20 апреля 2020

После того, как Google и нашел это .


Добавление исключения домена

Добавление исключения домена легко. Вы добавляете ключ NSExceptionDomains в NSAppTransportSecurity словаря Info.plist цели. Значением ключа является словарь, причем каждый ключ словаря является исключением домена. Для пояснения взгляните на следующий пример.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>cocoacasts.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
        </dict>
   </dict>
</dict>

В приведенном выше примере добавляется субдомен cocoacasts.com и задается NSExceptionAllowsInsecureHTTPLoads, чтобы разрешить http запрос для этого суб -домен. В сообщении говорится об этом в начале.

Apple недавно объявила, что для каждой сборки, представленной в App Store, необходимо включить App Transport Security, начиная с 1 января 2017 года.

Это означает, что по умолчанию все коммуникации выполняются https. Если приложению требуется http, то для этих поддоменов исключений необходимо настроить Info.plist.

...