Ошибка 400 при загрузке файла с заголовком «Авторизация» - PullRequest
1 голос
/ 05 марта 2020

Сервер, возвращающий файл json, который:

{"ctrl":{"code":400,"text":"Not valid Access token","ts":"2020-03-05T11:54:01.547Z"}}

Код:

public func startDownload(url: URL, pathURL: URL) {
        let accessToken: String! = "Bearer \(Constants.access_token)"
        self.dirURL = pathURL
        var request = URLRequest(url: url)
        guard let token = accessToken else { return }
        request.addValue(token, forHTTPHeaderField: "Authorization")
        downloadTask = backgroundSession.downloadTask(with: request)
        downloadTask.resume()
}

Справка: токен доступа действителен, он работает с почтальоном.

1 Ответ

1 голос
/ 05 марта 2020

У вас будет проблема, потому что, к сожалению, нет хорошего решения этой проблемы. Authorization является одним из зарезервированных заголовков HTTP и установка его в заголовке URLRequest или в URLSessionConfiguration.httpAdditionalHeaders может просто не работать:

Если вы установите значение для одного из этих зарезервированных заголовков система может игнорировать заданное вами значение, либо перезаписать его своим собственным значением, либо просто не отправлять его.

Можно было бы ожидать, что вы могли бы предоставить этот токен в URLSessionTaskDelegate методе urlSession(_:task:didReceive:completionHandler:), который обрабатывает вызовы аутентификации, но там вам нужно предоставить URLCredential объект, и, к сожалению, он не имеет конструктор, который принимает токен Bearer, так что это не ... , custom, поле заголовка и заставьте сервер взять его оттуда (если у вас есть контроль над кодом сервера). Источник

...