| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import Foundation
- public protocol RedirectHandler {
-
-
-
-
-
-
-
-
-
-
-
-
-
- func task(_ task: URLSessionTask,
- willBeRedirectedTo request: URLRequest,
- for response: HTTPURLResponse,
- completion: @escaping (URLRequest?) -> Void)
- }
- public struct Redirector {
-
- public enum Behavior {
-
- case follow
-
- case doNotFollow
-
- case modify((URLSessionTask, URLRequest, HTTPURLResponse) -> URLRequest?)
- }
-
- public static let follow = Redirector(behavior: .follow)
-
- public static let doNotFollow = Redirector(behavior: .doNotFollow)
-
- public let behavior: Behavior
-
-
-
- public init(behavior: Behavior) {
- self.behavior = behavior
- }
- }
- extension Redirector: RedirectHandler {
- public func task(_ task: URLSessionTask,
- willBeRedirectedTo request: URLRequest,
- for response: HTTPURLResponse,
- completion: @escaping (URLRequest?) -> Void) {
- switch behavior {
- case .follow:
- completion(request)
- case .doNotFollow:
- completion(nil)
- case let .modify(closure):
- let request = closure(task, request, response)
- completion(request)
- }
- }
- }
|