Как мне кодировать данные двоичного файла в ISO-8859-1, чтобы прикрепить к телу сообщения HTTP-сообщения - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь преобразовать полную строку байтов из файла, открытого в двоичном режиме, в строку, закодированную в наборе символов ISO-8859-1.Насколько я понимаю, при преобразовании в ISO-8859-1 вся двоичная информация из файла сохраняется, поэтому она преобразуется в этот формат.Это допустимое утверждение?

Я работаю в C ++ (Visual Studio 2017), создавая исполняемый файл для использования на платформе Windows.У меня нет опыта в программировании HTTP.

У меня есть прототип кода, написанный на коде PowerShell, который успешно выполняет функции, которые я пытаюсь дублировать в C ++.В коде Power Shell HTTP-сообщение отправляется для загрузки файла прошивки на устройство.

  • Сообщение содержит заголовки и тело:
  • Сообщение использует multipart / форму-data protocol.

Пример заголовков сообщения:

Authorization: Bearer Yosda0IDRQuVaU_L0SnV5g==                                                                                                              
Content-Type: multipart/form-data; boundary=42b745c8-4da8-454e-8c13-cbb5c1f7694f                                                                           
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8  

Пример тела сообщения:

--1a2fc07a-d882-4470-a1da-79716d34cd9b
Content-Disposition: form-data; name="upgrade_file"; filename=""
Content-Type: application/octet-stream

// File data (encoded in ISO-8859-1 format) goes here //
--1a2fc07a-d882-4470-a1da-79716d34cd9b
Content-Disposition: form-data; name="submit"

Install OS
--1a2fc07a-d882-4470-a1da-79716d34cd9b--

Сценарий PowerShell преобразует файл со следующими строками кода:

$bytes = [System.IO.File]::ReadAllBytes($file.FullName);
if ( $bytes )
{
  $enc = [System.Text.Encoding]::GetEncoding(iso-8859-1);
  $data = $enc.GetString($bytes);
}

После настройки заголовков и тела сообщение отправляется, и при запуске кода PowerShell загружается прошивка.

В моем коде на C ++ я разработал заголовки и коды до и после тела.Я думаю (не уверен), что мне просто нужно преобразовать файл в iso-8859-1, чтобы заставить сообщение работать сейчас.

Я использую libcurl для отправки сообщения.

res = curl_easy_perform(pCurl);

В настоящее время (без преобразования файла в iso-8859-1) я получаю следующее сообщение об ошибке при вызове функции:

Ошибка при получении данных от однорангового узла

Когда сообщение отправлено, я вижу, что загружены только некоторые байты.Я предполагаю, что это может быть из-за того, что данные файла не закодированы должным образом и когда они читают эти данные, они достигают некоторой точки, где данные находятся в формате, который они не могут обработать.

...