Swift:带有 json 正文的 alamofire 帖子

Posted

技术标签:

【中文标题】Swift:带有 json 正文的 alamofire 帖子【英文标题】:Swift : alamofire post with json body 【发布时间】:2017-06-08 06:38:38 【问题描述】:

我正在使用alarmofire来实现POST请求。

目标是发布为:

curl -X POST --header 'Content-Type: application/json' 
     --header 'Accept: application/json' -d '"dest":"Place","reason":"Reason","carId":1,"starttime":1496975475840,"departmentId":3,"distance":0.0,"driverId":1' 
     'http://localhost:8080/serviceCar/v1_0/placeOrder?access_token=25621648-1da5-438e-a52c-f927e2c59de4'

网址是http://localhost:8080/serviceCar/v1_0/placeOrder

我有一个订单类,如何将对象作为请求正文发布,同时将令牌作为表单数据发送?

【问题讨论】:

向我们展示您的 Alamofire 请求代码。 【参考方案1】:

Here 是您想要的这种情况。

如果提供的 ParameterEncoding 类型不能满足您的需求,您可以创建自己的自定义编码。这是一个快速示例,说明如何构建自定义 JSONStringArrayEncoding 类型以将 JSON 字符串数组编码到请求中。

struct JSONStringArrayEncoding: ParameterEncoding 
    private let array: [String]

    init(array: [String]) 
        self.array = array
    

    func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest 
        var urlRequest = try urlRequest.asURLRequest()

        let data = try JSONSerialization.data(withJSONObject: array, options: [])

        if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil 
            urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type")
        

        urlRequest.httpBody = data

        return urlRequest
    

这是设置请求头的示例[from doc]:

let user = "user"
let password = "password"

var headers: HTTPHeaders = [:]

if let authorizationHeader = Request.authorizationHeader(user: user, password: password) 
    headers[authorizationHeader.key] = authorizationHeader.value


Alamofire.request("https://httpbin.org/basic-auth/user/password", headers: headers)
    .responseJSON  response in
        debugPrint(response)
    

【讨论】:

以上是关于Swift:带有 json 正文的 alamofire 帖子的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 3 中使用 Alamofire 在 POST 请求中将给定的 JSON 作为参数发送?

Swift 2.0 + Alamofire 3.0 - 缓慢加载 JSON

如何从 Swift 3 上的响应字符串中检索标题字段?

带有正文的 Swift HTTP POST

带有 XML 响应和正文的 SOAP 请求 swift 3,Alamofire

在 Swift 中使用 JSON 正文发出 HTTP Post 请求