Я пытаюсь преобразовать полную строку байтов из файла, открытого в двоичном режиме, в строку, закодированную в наборе символов ISO-8859-1. Насколько я понимаю, при преобразовании в ISO-8859-1 вся двоичная информация из файла сохраняется, поэтому она преобразуется в этот формат. Это верное утверждение?
Я работаю на С++ (Visual Studio 2017), создавая исполняемый файл для использования на платформе Windows. У меня нет опыта в программировании HTTP.
У меня есть код прототипа, написанный в коде PowerShell, который успешно выполняет функции, которые я пытаюсь воспроизвести на C++. В коде Power Shell отправляется HTTP-сообщение для загрузки файла прошивки на устройство.
- Сообщение включает заголовки и тело:
- Сообщение использует протокол multipart/form-data.
Пример заголовков сообщения:
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) я получаю следующее сообщение об ошибке при вызове функции:
Сбой при получении данных от пира
Когда сообщение отправлено, я вижу, что загружаются только некоторые байты. Я предполагаю, что это может быть связано с тем, что данные файла не закодированы должным образом, и когда он читает эти данные, он достигает некоторой точки, когда данные находятся в формате, который он не может обработать.
application/octet-stream
. При использовании libcurl следует использоватьcurl_mime_init()
,curl_mime_addpart()
,curl_mime_filedata()
и т. д., чтобы подготовить запросmultipart/form-data
, а затем отправить его с помощьюCURLOPT_MIMEPOST
... - person Remy Lebeau   schedule 27.03.2019CURLOPT_HTTPPOST
может опубликовать двоичный файл в форматеmultipart/form-data
черезcurl_formadd(CURLFORM_FILE)
. - person Remy Lebeau   schedule 27.03.2019