Swift后台下载任务不调用willPerformHTTPRedirection

cs7cruho  于 2023-09-30  发布在  Swift
关注(0)|答案(1)|浏览(151)

我在使用后台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,但我更喜欢正确的方法,如果不是这样的话。

im9ewurl

im9ewurl1#

后台url会话由操作系统处理,而不是你的应用进程。因此,它们如何操作存在一些限制。
特别是redirections are always followed

因此,不调用委托方法是预期的行为。您需要调查为什么没有从重定向中获得任何数据。

相关问题