DomainDig/HTTPHeadersService.swift

ede15c586af71b8d6f2c190ffdad0324414cac06
domain-dig/DomainDig/HTTPHeadersService.swift history · blame · raw

22 lines · 789 bytes

 1import Foundation
 2
 3struct HTTPHeadersService {
 4    static func fetch(domain: String) async throws -> [HTTPHeader] {
 5        let url = URL(string: "https://\(domain)")!
 6        var request = URLRequest(url: url, timeoutInterval: 10)
 7        request.httpMethod = "HEAD"
 8
 9        let (_, response) = try await URLSession.shared.data(for: request)
10
11        guard let httpResponse = response as? HTTPURLResponse else {
12            throw URLError(.badServerResponse)
13        }
14
15        return httpResponse.allHeaderFields.compactMap { key, value in
16            guard let name = key as? String,
17                  let val = value as? String else { return nil }
18            return HTTPHeader(name: name, value: val)
19        }
20        .sorted { $0.name.lowercased() < $1.name.lowercased() }
21    }
22}