我在OS X和Linux上遇到了URLSession / URLSessionConfiguration / URLSessionDataTask的不同行为问题。
斯威夫特:3.0.2 Kitura:1.3我正在做以下事情:
let aURL = URL(string: "...")!
// Because shared is not implemented
let sessionConfig = URLSessionConfiguration.default
sessionConfig.httpAdditionalHeaders = ["Accept": "application/json", "Accept-Language": "sv-SE"]
let session = URLSession(configuration: sessionConfig)
// additionalHeaders are set just fine
Log.info("\(session.configuration.httpAdditionalHeaders)")
let dataTask = session.dataTask(with: aURL, completionHandler: { data, loadResponse, error in
...
})
dataTask.resume()
在配置对象上设置了其他标头,但是当部署到Bluemix时,响应显示缺少语言标头字段(我得到错误语言的响应)。
我知道请求是正确的,因为当我在本地构建并运行它(Kitura)时(在OS X上通过Xcode)我得到了预期的行为。
有没有人遇到过这个?该怎么办?去哪儿了?
答案 0 :(得分:2)
这可能是评论,但我仍然不允许发表评论!
是的,我的同事在this bug工作时遇到了这个问题。我认为你采用的解决方案是最好的选择。这需要更多的调查。我已针对此问题创建了new bug report报告。
答案 1 :(得分:0)
自己发现了一个hackaround:
...
var request = URLRequest(url: aURL, cachePolicy: .reloadRevalidatingCacheData, timeoutInterval: 3)
request.setValue("sv-SE", forHTTPHeaderField: "Accept-Language")
let dataTask = URLSession(configuration: URLSessionConfiguration.default).dataTask(with: request, ...
即使它有效,但知道原始解决方案的效果会很好,因为我更喜欢它(它更漂亮)。
它是基础Linux上的一个错误吗?
编辑:解决方法似乎只适用于Swift 3.0.2,它在3.0.1中不起作用。 URL标题确实很时髦。