httpAdditionalHeaders不在linux上工作

时间:2016-12-19 19:39:20

标签: linux swift ibm-cloud foundation kitura

我在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)我得到了预期的行为。

有没有人遇到过这个?该怎么办?去哪儿了?

2 个答案:

答案 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标题确实很时髦。