我在使用后台urlsession时遇到了一个问题,我的willPerformHTTPRedirection
没有被调用:
private class BackgroundCachingDelegate: NSObject, URLSessionDelegate, URLSessionTaskDelegate, URLSessionDownloadDelegate
{
func urlSession(_ session: URLSession, task: URLSessionTask, willPerformHTTPRedirection response: HTTPURLResponse, newRequest request: URLRequest) async -> URLRequest?
{
//... Never gets called
}
}
我这样称呼它:
private func createNewBackgroundSession()
{
let backgroundCachingConfiguration = URLSessionConfiguration.background(withIdentifier: OfflineCacheService.entityBackgroundSessionIdentifier)
backgroundCachingConfiguration.requestCachePolicy = .reloadIgnoringLocalCacheData
let backgroundCachingDelegate = BackgroundCachingDelegate(/*params*/)
self.backgroundCachingSession = URLSession(configuration: backgroundCachingConfiguration, delegate: backgroundCachingDelegate, delegateQueue: nil)
}
private func startRequest(url: URL)
{
if self.backgroundCachingSession == nil
{
self.createNewBackgroundSession()
}
var request = self.uiViewController.getURLRequest(method: "GET", url: url)
request.cachePolicy = .reloadIgnoringCacheData
self.backgroundCachingSession!.downloadTask(with: request).resume()
}
如果我直接获取重定向的URL并尝试使用该URL,则代码可以正常工作。
我也确定服务器正在执行重定向:
有什么想法吗?
更新
也许还需要提一下,我确实得到了一个0字节的响应,并将重定向的URL作为响应URL。我可以有一个基于上述的边缘情况,并调用新的重定向url,但我更喜欢正确的方法,如果不是这样的话。
1条答案
按热度按时间im9ewurl1#
后台url会话由操作系统处理,而不是你的应用进程。因此,它们如何操作存在一些限制。
特别是redirections are always followed
urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)
,也不会调用它。因此,不调用委托方法是预期的行为。您需要调查为什么没有从重定向中获得任何数据。