如何使用 Alamofire 读取 Content-Length HTTPResponse Swift

How to read Content-Length HTTPResponse with Alamofire Swift

我正在尝试从响应中读取 Content-Length,但它总是跳过并且得不到响应。即使是最简单的。我用了不同的 URL link 来检查,但每次跳过的结果都是一样的,没有任何反应。

URLlink: 计算长度(Link:“”)

代码:

func calculateLength(Link: String)  {
        Alamofire.request(Link, method: .get, parameters: nil, encoding: URLEncoding.httpBody).responseJSON
                    { response in
                        //to get JSON return value
                        if let ALLheader = response.response?.allHeaderFields  {
                            if let header = ALLheader as? [String : Any] {
                                if let contentLength = header["Content-Length"] as? String {

                                }
                            }
                        }
        }
    }

从服务器获取的响应:

(Response) <NSHTTPURLResponse: 0x6000000c7120> { URL:  } { Status Code: 200, Headers {
    "Cache-Control" =     (
        private
    );
    "Content-Encoding" =     (
        gzip
    );
    "Content-Length" =     (
        837
    );
    "Content-Type" =     (
        "text/html"
    );
    Date =     (
        "Thu, 21 May 2020 08:04:55 GMT"
    );
    Server =     (
        "Microsoft-IIS/8.5"
    );
    "Set-Cookie" =     (
        "ASPSESSIONIDSSSCCBAB=AKDPKPMCKNDJPANFODFAJKAH; path=/"
    );
    Vary =     (
        "Accept-Encoding"
    );
    "X-Powered-By" =     (
        "ASP.NET"
    );
} }

对于 Alamofire 5,您的函数将如下所示:

func calculateLength(link: String) {
     AF.request(link, method: .get).response() { response in
         if let headers = response.response?.headers  {
             print(headers.value(for: "Content-Length"))
         }
     }
}

对于 Alamofire 4 来说就是这样

func calculateLength(link: String) {
     Alamofire.request(link, method: .get).responseJSON { response in
         if let headers = response.response?.allHeaderFields as? [String : Any] {
             if let contentLength = headers["Content-Length"] as? String {
                 print(contentLength)
             }
         }
     }
}

访问 HTTPURLResponse 的 属性 value(适用于 iOS 13 岁及以上)或 allHeaderFields 根据 iOS版本。 您只需传递密钥名称,在您的情况下为 "Content-Length"

extension HTTPURLResponse {
    func valueForHeaderField(_ headerField: String) -> String? {
        if #available(iOS 13.0, *) {
            return value(forHTTPHeaderField: headerField)
        } else {
            return (allHeaderFields as NSDictionary)[headerField] as? String
        }
    }
}

你可以调用上面的函数,

let contentLegth = response.response.valueForHeaderField("Content-Length")