Из внутреннего узла node.js мне нужно отправить HTTP-сообщение конечной точке REST.Конечной точке требуются некоторые параметры, которые она ожидает найти в HTTP-сообщении.Некоторые из параметров достаточно просты, просто требуют числа или строки в качестве аргумента.Но один из параметров должен быть «загружаемым необработанным содержимым двоичного файла», и это озадачило меня.Насколько я понимаю, параметры должны быть собраны в строку для помещения в тело HTTP-запроса;Как добавить необработанные двоичные данные в строку?Очевидно, что для того, чтобы он был в строке, он не может быть необработанными двоичными данными;он должен быть закодирован в символы.
Конечной точкой является API загрузки медиафайлов Twitter .Параметр «необработанные двоичные данные» называется media
.Ниже приведен неполный фрагмент кода, показывающий основную суть того, что я пробовал.В частности, строка, где я строю строку requestBody
.Я не верю, что это почти правильно, потому что конечная точка возвращает сообщение «неверный запрос».
var https = require("https");
var base64ImageData = /* (some base 64 string here) */;
var options = {
host: "api.twitter.com",
path: "/1.1/media/upload.json",
method: "POST",
headers: {
"Content-Type": "multipart/form-data"
}
};
var request = https.request(options, function(response) {});
var requestBody = "media_id=18283918294&media=" + Buffer.from(base64ImageData, "base64").toString("binary");
request.write(requestBody);
request.end();
Также стоит отметить, что сами Twitter отметили следующее крайне запутанное утверждение:
«При публикации изображений в кодировке base64 обязательно установите« Content-Transfer-Encoding: base64 » в части изображения сообщения .»
Источник: https://developer.twitter.com/en/docs/media/upload-media/uploading-media/media-best-practices
Это может быть частью ответа на мой вопрос, но я не понимаю: Как применить разные заголовки к разным частям HTTP-сообщения? Поскольку, очевидно, данные изображениядолжен иметь заголовок Content-Transfer-Encoding "base64", в то время как остальная часть HTTP-сообщения не ...