httpAdditionalHeaders не работает в Linux

Я столкнулся с проблемой различного поведения URLSession/URLSessionConfiguration/URLSessionDataTask в OS X и Linux.

Свифт: 3.0.2 Китура: 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) локально (через Xcode в OS X), я получаю ожидаемое поведение.

Кто-нибудь сталкивался с этим? Что делать? Куда идти?


person Stanislav Goryachev    schedule 19.12.2016    source источник
comment
Эта проблема исправлена. bugs.swift.org/browse/SR-3463 Запрос на извлечение:github.com/apple/swift-corelibs-foundation/pull/927   -  person Nasser Ebrahim    schedule 17.04.2017


Ответы (2)


Это мог быть комментарий, но мне все еще не разрешено оставлять комментарии!

Да, мой коллега столкнулся с этим, работая над этой ошибкой. Я думаю, что обходной путь, который вы приняли, является лучшим альтернативным вариантом. Это требует дополнительного расследования. Я создал новый отчет об ошибке для этой проблемы.

person pushkarnk    schedule 20.12.2016
comment
Спасибо за это, меня поразило то, что кажется таким же (обходной путь не помог мне - stackoverflow.com/questions/41601863/ ). Я проголосовал за ваш отчет об ошибке, надеюсь, другие сделают то же самое - person niklassaers; 12.01.2017

Нашел обходной путь:

...
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, ...

Несмотря на то, что это работает, было бы неплохо узнать, что происходит с исходным решением, потому что оно мне нравится больше (красивее).

Это ошибка в Foundation на Linux?

Изменить: похоже, обходной путь работает только в Swift 3.0.2, он не работает в 3.0.1. Что-то действительно странное с заголовками URL.

person Stanislav Goryachev    schedule 19.12.2016