Можно ли использовать curl и публиковать двоичные данные без передачи имени файла? Например, вы можете опубликовать форму с помощью двоичного файла через --data-binary:
curl -X POST --data-binary @myfile.bin http://foo.com
Однако для этого требуется, чтобы файл существовал. Я надеялся, что смогу записать HTTP-вызовы (например, на остальные службы) как текст команды curl для воспроизведения запроса. (это очень помогает отладке этих сервисов, например)
Однако регистрация команд скручивания, которые ссылаются на файл, не будет полезной, поэтому я надеялся, что смогу фактически записать необработанные двоичные данные, предположительно закодированные в base64, и все же позволить вам скопировать и вставить команду записанной скручивания и выполнить ее.
Итак, возможно ли использовать curl и публиковать двоичные данные без ссылки на файл? Если так, как это будет работать? Как будет выглядеть пример?
Ответы:
Вы можете передавать данные в curl через STDIN следующим образом:
Он
@-
говорит,curl
чтобы вытащить из STDIN.Чтобы передать двоичные данные в curl (например):
источник
echo -e '\x03\xF1' | curl -X POST --data-binary @- http://foo.com
где\x03\xF1
сырые двоичные данные в шестнадцатеричном формате, что в значительной степени именно то, что я хочу.cat 1.jpg | curl -X POST --data-binary @- http://foo.com
. Работал как шарм. Чтобы проверить, я также попытался:cat 1.jpg | md5sum
иmd5sum 1.jpg
. Они оба вернули одно и то же значение.Не знаю почему, но точная командная строка, которую предложил slm, не сработала для меня. С небольшой модификацией сработало следующее:
источник
Добавляя к этому ответу,
echo
команда добавляет к выходу символ новой строки по умолчанию. Это добавляет\n
к концу ваши двоичные данные, поэтому curl получит и этот символ в качестве ввода.Чтобы избежать этого, вы можете использовать
printf
команду или-n
переключатель следующим образом:или
Таким образом, никакая новая строка не будет добавлена к входу curl, и байты, передаваемые в curl, будут именно теми, на которые вы переходите
echo
.источник