如何使用 Alamofire 发送带有压缩内容的 HTTP POST 请求?

Posted

技术标签:

【中文标题】如何使用 Alamofire 发送带有压缩内容的 HTTP POST 请求?【英文标题】:How to send HTTP POST request with gziped content with Alamofire? 【发布时间】:2017-03-28 06:41:40 【问题描述】:

我正在开发一个 ios 应用程序,将大约 2000 个对象数组发布到服务器。我在做一个实验。我用过

let param: [String: AnyObject] = [
    "OwnerEmail": document.fromOwner!.email as AnyObject,
    "UTCTimeStamp": document.utcTimeStamp as AnyObject,
    "Latitude": document.latitude as AnyObject,
    "Longitude": document.longitude as AnyObject,
    ...
]

customAlamofireManager.request(<ServerURL>, 
    method: .post, 
    parameters: param, 
    encoding: JSONEncoding.default, 
    headers: headers)

发布 1 个对象。但是现在我要发布 2000 或更多,我正在考虑使用 gzip 压缩对象数组,然后上传以检查网络效率。但我不知道如何使用 Alamofire 做到这一点。 我找到了这个link。

但是 Alamofire 现在在最新版本中没有枚举 ParameterEncoding。其他一些链接建议使用 Alamofire.upload。 任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

您可以使用以下代码通过 Alamofire SDK 传递 POST 请求的参数:

 let param: [String: AnyObject] = [
        "OwnerEmail": document.fromOwner!.email as AnyObject,
        "UTCTimeStamp": document.utcTimeStamp as AnyObject,
        "Latitude": document.latitude as AnyObject,
        "Longitude": document.longitude as AnyObject,
        ...
    ]
    var request = URLRequest(url: URL(string: url)!)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    do
        let data = try JSONSerialization.data(withJSONObject: param, options: .prettyPrinted)
        request.httpBody = data

        Alamofire.request(request).responseJSON  (response) in


            print(response)

        

     catch
        
       

这将帮助您解决上述问题。

【讨论】:

我有大约几千个这样的参数,想先压缩它,然后再发布。我只能成功发布 1 个参数。谢谢。

以上是关于如何使用 Alamofire 发送带有压缩内容的 HTTP POST 请求?的主要内容,如果未能解决你的问题,请参考以下文章

快速发送带有参数的 Alamofire 请求

如何使用带有 Alamofire 参数的数组?

在 Swift 中使用 Alamofire 网络进行解析时,如何在请求中发送内容类型?

如何在 Swift 中使用 Alamofire 上传带有 JSON 参数的图像?

带有 HTTPBody 问题的 Alamofire 数据发送

使用 swift 在 Alamofire 中发送带有对象数组的 JSON 作为参数