diff --git a/RSWeb/Sources/RSWeb/Downloader.swift b/RSWeb/Sources/RSWeb/Downloader.swift index f4037a1df..c0dc12ca8 100755 --- a/RSWeb/Sources/RSWeb/Downloader.swift +++ b/RSWeb/Sources/RSWeb/Downloader.swift @@ -38,16 +38,15 @@ public final class Downloader { } public func download(_ url: URL, _ completion: DownloadCallback? = nil) { - let task = urlSession.dataTask(with: url) { (data, response, error) in - DispatchQueue.main.async() { - completion?(data, response, error) - } - } - task.resume() + download(URLRequest(url: url), completion) } public func download(_ urlRequest: URLRequest, _ completion: DownloadCallback? = nil) { - let task = urlSession.dataTask(with: urlRequest) { (data, response, error) in + + var urlRequestToUse = urlRequest + urlRequestToUse.addSpecialCaseUserAgentIfNeeded() + + let task = urlSession.dataTask(with: urlRequestToUse) { (data, response, error) in DispatchQueue.main.async() { completion?(data, response, error) } diff --git a/RSWeb/Sources/RSWeb/SpecialCases.swift b/RSWeb/Sources/RSWeb/SpecialCases.swift index 49c311f8a..67c70f6ed 100644 --- a/RSWeb/Sources/RSWeb/SpecialCases.swift +++ b/RSWeb/Sources/RSWeb/SpecialCases.swift @@ -66,6 +66,16 @@ extension Set where Element == URL { } } +extension URLRequest { + + mutating func addSpecialCaseUserAgentIfNeeded() { + + if let url, url.isOpenRSSOrgURL { + setValue(UserAgent.openRSSOrgUserAgent, forHTTPHeaderField: HTTPRequestHeader.userAgent) + } + } +} + extension UserAgent { static let openRSSOrgUserAgent = {