feat(sdk): 添加大小写不敏感的 HTTP 响应头读取方法

This commit is contained in:
km2023
2026-06-04 10:51:20 +08:00
parent ed7de42e61
commit 1657b925ef
3 changed files with 23 additions and 4 deletions

View File

@@ -154,7 +154,7 @@ extension DuooomiBleSDK {
completion(.failure(DuooomiBleError.transferFailed("Format check failed: \(error.localizedDescription)")))
return
}
guard let mime = (response as? HTTPURLResponse)?.allHeaderFields["Content-Type"] as? String else {
guard let mime = (response as? HTTPURLResponse)?.headerValue(caseInsensitive: "Content-Type") else {
completion(.failure(DuooomiBleError.unsupportedFormat("unknown")))
return
}
@@ -183,7 +183,7 @@ extension DuooomiBleSDK {
}
if let http = response as? HTTPURLResponse {
if let lengthStr = http.allHeaderFields["Content-Length"] as? String,
if let lengthStr = http.headerValue(caseInsensitive: "Content-Length"),
let length = Int(lengthStr), length > 0 {
completion(.success(length))
return
@@ -209,7 +209,7 @@ extension DuooomiBleSDK {
return
}
if let http = response as? HTTPURLResponse,
let rangeHeader = http.allHeaderFields["Content-Range"] as? String,
let rangeHeader = http.headerValue(caseInsensitive: "Content-Range"),
let totalStr = rangeHeader.split(separator: "/").last,
let total = Int(totalStr), total > 0 {
completion(.success(total))

View File

@@ -69,7 +69,7 @@ final class BeijingTimeProvider {
}
if let http = resp as? HTTPURLResponse,
let dateHeader = (http.allHeaderFields["Date"] ?? http.allHeaderFields["date"]) as? String,
let dateHeader = http.headerValue(caseInsensitive: "Date"),
let value = self.formatHTTPDateHeader(dateHeader) {
done(value)
return

View File

@@ -0,0 +1,19 @@
import Foundation
extension HTTPURLResponse {
/// HTTP
///
/// HTTP/2RFC 7540 §8.1.2 `content-length`
/// `allHeaderFields` `["Content-Length"]`
/// HTTP/2 `value(forHTTPHeaderField:)`
/// iOS 13+ SDK iOS 12
func headerValue(caseInsensitive name: String) -> String? {
for (key, value) in allHeaderFields {
if let keyStr = key as? String,
keyStr.caseInsensitiveCompare(name) == .orderedSame {
return value as? String
}
}
return nil
}
}