Alamofire несколько параметров (запрос и форма) Swift 4 - PullRequest
0 голосов
/ 21 сентября 2018

У меня проблема с отправкой POST-запроса с Alamofire.Мне нужно отправить поля usser и password как application / x-www-form-urlencode, а также некоторые данные запроса в URL.

Я создаю URLRequest для обработки процесса, но получаю всегдаответ от сервера 400, так что, я думаю, проблема в том, как я создаю запрос.

Это пример в Postman: мне нужно отправить параметр в URL и еще два в качестве приложения./ x-www-form-urlencode

Почтальон 1 - Параметры Почтальон 2 - ContentType

Мне нужно сделать это (что у меня есть вAndroid)

@FormUrlEncoded
    @POST(Constants.AUTH_LDAP)
    Call<ResponseBody> authLdap(
            @Query(value = Constants.PARAM_REQ, encoded = true) String req,
            @Field(Constants.PARAM_LOGIN) String login,
            @Field(Constants.PARAM_PASSWORD) String password
    );

И вот что у меня есть в swift

let queryParamters  =  [Constants.Params.PARAM_REQ:req]
let headers = ["Content-Type": "application/x-www-form-urlencoded"]
let fieldParameters = [
    Constants.Params.PARAM_LOGIN : user,
    Constants.Params.PARAM_PASSWORD : pass]

let url = URL(string: Constants.EndPoints.AUTH_LDAP)
let request = URLRequest(url: url!)
let encoding = try URLEncoding.default.encode(request, with: queryParamters as Parameters)
let encodingpa = try URLEncoding.httpBody.encode(request, with: fieldParameters as Parameters)
var urlRequest = encodingpa
urlRequest.url = encoding.url
urlRequest.allHTTPHeaderFields = headers
Alamofire.request(urlRequest).responseData(completionHandler: { response in
        switch response.result {
            case .success:
            print("sucess")
            print(response.response)
            case .failure(let error):
            print(error)
        }
    })

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 23 апреля 2019

Попробуйте создать URL-адрес из queryParameters, используя такие компоненты URLC, как

var urlComponents = URLComponents(string: Constants.EndPoints.AUTH_LDAP)!
urlComponents.queryItems = [
  URLQueryItem(name: Constants.Params.PARAM_REQ, value: req)
]

let headers = ["Content-Type": "application/x-www-form-urlencoded"]
var request = URLRequest(url: urlComponents.url!)
request.httpMethod = "POST"
request.httpBody = try? JSONSerialization.data(withJSONObject: fieldParameters)
request.allHTTPHeaderFields = headers

Alamofire.request(request).responseJSON { response in

}
...