【问题标题】:Alamofire multiple parameters (Query and Form) Swift 4Alamofire 多参数(查询和表单)Swift 4
【发布时间】:2019-02-25 08:21:58
【问题描述】:

我在使用 Alamofire 发送 POST 请求时遇到问题。 我需要将用户名和密码字段作为 application/x-www-form-urlencode 以及 url 中的一些查询数据发送。

我正在创建一个 URLRequest 来处理该过程,但我总是从服务器收到 400 响应,所以我想问题一定出在我创建请求的方式上。

这是 Postman 中的示例: 我需要在 url 中发送一个参数,另外两个作为 application/x-www-form-urlencode

Postman 1 - Parameters Postman 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)
        }
    })

感谢您的帮助。

【问题讨论】:

  • 您需要使用查询字符串发布请求吗?
  • 你的意思是像:let encodingpa = try URLEncoding.queryString.encode(request, with: fieldParameters as Parameters)

标签: swift alamofire


【解决方案1】:

尝试使用 URLComponents 从 queryParameters 创建 url,例如

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

}

【讨论】:

    猜你喜欢
    • 2019-03-16
    • 2018-08-10
    • 2017-01-27
    • 1970-01-01
    • 2018-01-30
    • 2018-07-08
    • 2017-04-22
    • 2023-03-14
    相关资源
    最近更新 更多