Я пытаюсь передать вывод cat
на curl:
$ cat file | curl --data '{"title":"mytitle","input":"-"}' http://api
Но input
- буквально -
.
Я пытаюсь передать вывод cat
на curl:
$ cat file | curl --data '{"title":"mytitle","input":"-"}' http://api
Но input
- буквально -
.
Я потратил некоторое время, пытаясь понять это, и заставил его работать со следующим:
cat data.json | curl -H "Content-Type: application/json" -X POST -d @- http://api
Вы можете использовать магический файл stdin /dev/stdin
cat data.json | curl -H "Content-Type: application/json" -X POST -d "$(</dev/stdin)" http://api
Try
curl --data '{"title":"mytitle","input":"'$(cat file)'-"}' http://api
Это также должно работать
curl -H "Content-Type: application/json" -d @data.json http://api
Использование -d принудительно зависает, чтобы неявно использовать POST для запроса.
Документация по скручиванию для опции -d
Если вы начинаете данные с буквы @, остальное должно быть именем файла для чтения данных, или - если вы хотите, чтобы завиток читал данные из stdin. Также можно указать несколько файлов. Таким образом, отправка данных из файла с именем "foobar" выполняется с помощью -d, --data @foobar. Когда -data говорят, чтобы читать из такого файла, возврат каретки и строки новой строки будут удалены. Если вы не хотите, чтобы символ @имел специальную интерпретацию, вместо этого используйте -data-raw.
В зависимости от вашей конечной точки HTTP, конфигурации сервера, вы должны быть хорошо, используя этот формат:
curl -d @data.json http://api
Похоже, вы хотите обернуть содержимое input
в тело JSON, а затем отправить его с запросом POST. Я думаю, что самый простой способ сделать это - сначала манипулировать с stdin, а затем -d @-
чтобы свернуться, используя -d @-
. Один из способов может выглядеть так:
cat <(echo '{"title":"mytitle","input":"') file <(echo '"}') \
| curl -d @- http://api
Я использую <(echo)
чтобы использовать cat
для объединения строк, почти наверняка есть наиболее эффективный способ.
Имейте в виду, что это не исключает содержимое file
и что из-за этого у вас могут возникнуть проблемы.