RedirectHandler

一个协议,提供重定向函数,入参为将要被重定向的URLRequest,用闭包的方式返回一个新的URLRequest。
Session 内部有此成员变量,初始化时候可以传入。
具体执行过程在SessionDelegate中,URLSession的系统回调方法

  1. open func urlSession(_ session: URLSession,
  2. task: URLSessionTask,
  3. willPerformHTTPRedirection response: HTTPURLResponse,
  4. newRequest request: URLRequest,
  5. completionHandler: @escaping (URLRequest?) -> Void) {
  6. eventMonitor?.urlSession(session, task: task, willPerformHTTPRedirection: response, newRequest: request)
  7. if let redirectHandler = stateProvider?.request(for: task)?.redirectHandler ?? stateProvider?.redirectHandler {
  8. redirectHandler.task(task, willBeRedirectedTo: request, for: response, completion: completionHandler)
  9. } else {
  10. completionHandler(request)
  11. }
  12. }

Redirector
一个遵循RedirectHandler的结构体,为我们提供了面对重定向可以采取的三个策略,目的是为了方便使用。
follow表示同意,doNotFollow禁止,modify修改重定向。