【发布时间】:2015-03-01 19:17:30
【问题描述】:
我正在尝试将 Alamofire 配置为根据每个请求跟踪(或不跟踪)重定向。
Alamofire 有一个私有内部类 SessionDelegate,它充当当前 URL 会话的 NSURLSessionTaskDelegate。 SessionDelegate 确实实现了相关的委托方法,URLSession(session:, task:, willPerformHTTPRedirection response:, request:, completionHandler:) 这正是我想要的。
更好的是,委托的实现参考了一个名为 taskWillPerformHTTPRedirection 的自定义变量闭包来确定如何处理重定向 - 再次,正是我想要的!
据我所知,默认情况下,该闭包始终为 nil——它不是由 Alamofire 内部分配的——这表明它旨在让用户为其分配一个闭包。
问题:我无法访问这个私有的SessionDelegate 类来为其taskWillPerformHTTPRedirection 变量分配一个闭包。它是一个私有类,对我的 Swift 文件不可见。将 Alamofire 请求配置为(不)遵循重定向的正确方法是什么?
【问题讨论】:
-
Alamofire 作为 AFnetworking 遵守 HTTP 标准。所以我认为它会自动跟踪重定向。我知道,因为我之前更改了域,并且应用程序会毫无问题地跟进重定向。
-
AFNetworking 可以配置为不遵循重定向。 Alamofire 肯定有这样做的基础。
-
由于 Alamofire 的代码不多,而且是一个非常年轻的库,所以我只会分叉库并使用 taskWillPerformHTTPRedirection 自己实现功能,正如您正确发现的那样。然后只需提交 PR。似乎@mattt 从一开始就将这些钩子放在那里,即使它们尚未被 Alamofire 公共 API 使用。
-
@TeemuKurppa:你是对的,当然,so I did。 :)
-
我开了一个赏金来让这个问题得到更多的关注。另请参阅 github.com/Alamofire/Alamofire/pull/350 上 Hersh 先生的初始实施。
标签: ios redirect swift alamofire