Бинарный файл должен попадать в HTTP-клиент как байты. Чтение его текстовым читателем и повторное кодирование полученной строки в ASCII может подменить значения ещё до того, как прокси что-либо получит. Работоспособность небольшого текстового примера не делает этот путь безопасным для изображения, архива или документа.

В существующем пути загрузки .NET замените это преобразование бинарным источником тела:

using var file = File.OpenRead(path);
using var content = new StreamContent(file);

Передайте содержимое через настроенную в приложении HTTP-загрузку; фрагмент задаёт источник тела, а существующий клиент по-прежнему отвечает за метод, адрес назначения, прокси и управление временем жизни.

Удалите любой Content-Length, вычисленный из количества символов старой строки. Это поле измеряет октеты. Позвольте HTTP-библиотеке построить кадрирование из представления тела, а не связывать количество символов с буфером в другой кодировке.

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

Сравните переданный файл с доверенным ожидаемым значением. Успех HTTP подтверждает, что операция загрузки завершилась на этом уровне; он не может показать, что предыдущее текстовое преобразование сохранило исходные байты.

Похожие статьи