Использовать трубку для завитущих данных

Я пытаюсь передать вывод cat на curl:

$ cat file | curl --data '{"title":"mytitle","input":"-"}' http://api

Но input - буквально -.

Ответ 1

Я потратил некоторое время, пытаясь понять это, и заставил его работать со следующим:

cat data.json | curl -H "Content-Type: application/json" -X POST -d @- http://api

Ответ 2

Вы можете использовать магический файл stdin /dev/stdin

cat data.json | curl -H "Content-Type: application/json" -X POST -d "$(</dev/stdin)" http://api

Ответ 3

Try

curl --data '{"title":"mytitle","input":"'$(cat file)'-"}' http://api

Ответ 4

Это также должно работать

curl -H "Content-Type: application/json" -d @data.json http://api

Использование -d принудительно зависает, чтобы неявно использовать POST для запроса.

Ответ 5

Документация по скручиванию для опции -d

Если вы начинаете данные с буквы @, остальное должно быть именем файла для чтения данных, или - если вы хотите, чтобы завиток читал данные из stdin. Также можно указать несколько файлов. Таким образом, отправка данных из файла с именем "foobar" выполняется с помощью -d, --data @foobar. Когда -data говорят, чтобы читать из такого файла, возврат каретки и строки новой строки будут удалены. Если вы не хотите, чтобы символ @имел специальную интерпретацию, вместо этого используйте -data-raw.

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

curl -d @data.json http://api

Ответ 6

Похоже, вы хотите обернуть содержимое input в тело JSON, а затем отправить его с запросом POST. Я думаю, что самый простой способ сделать это - сначала манипулировать с stdin, а затем -d @- чтобы свернуться, используя -d @-. Один из способов может выглядеть так:

cat <(echo '{"title":"mytitle","input":"') file <(echo '"}') \
| curl -d @- http://api

Я использую <(echo) чтобы использовать cat для объединения строк, почти наверняка есть наиболее эффективный способ.

Имейте в виду, что это не исключает содержимое file и что из-за этого у вас могут возникнуть проблемы.