如何使用 Alamofire 读取 Content-Length HTTPResponse Swift
How to read Content-Length HTTPResponse with Alamofire Swift
我正在尝试从响应中读取 Content-Length
,但它总是跳过并且得不到响应。即使是最简单的。我用了不同的 URL link 来检查,但每次跳过的结果都是一样的,没有任何反应。
- 甚至可以使用任何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")
我正在尝试从响应中读取 Content-Length
,但它总是跳过并且得不到响应。即使是最简单的。我用了不同的 URL link 来检查,但每次跳过的结果都是一样的,没有任何反应。
- 甚至可以使用任何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")