Я хочу сделать запрос POST от iOS (swift3), который передает кусок необработанных байтов в качестве тела. Я сделал некоторые эксперименты, которые заставили меня подумал следующее: работалiOS быстрый запрос почты с двоичным телом
let url = URL(string: "https://bla/foo/bar")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = Data(hex: "600DF00D")
let session = URLSession.shared
let task = session.dataTask(with: request) { (data, response, error) in
"DATA \(data ?? Data()) RESPONSE \(response) ERROR \(error)".print()
}
task.resume()
Не знал, что это была проблема, пока я не пытался посылать что-то простое, как один 0xF0. В какой момент мой смерч сервер начал жаловаться, что я отправлял его
WARNING:tornado.general:Invalid x-www-form-urlencoded body: 'utf-8' codec can't decode byte 0xf0 in position 2: invalid continuation byte
Am Я просто должен установить некоторый заголовок каким-то образом? Или мне нужно что-то другое?
Base64 не очень эффективен, но я, наконец, решил, что текстовые потоки в http-ville никогда не были настолько эффективными. И это одна строка кода, чтобы превратить двоичные данные в ее базовую версию. Поскольку я использую его для тела, а не для URL-адреса, мне даже не нужно бежать. –