Curl 将管道用于旋度数据
我试图将Curl 将管道用于旋度数据,curl,pipe,Curl,Pipe,我试图将cat输出传递给curl: $ cat file | curl --data '{"title":"mytitle","input":"-"}' http://api 但是输入实际上是一种-尝试 curl --data '{"title":"mytitle","input":"'$(cat file)'-"}' http://api 我花了一段时间试图弄明白这一点,并通过以下方式实现了: cat data.json | curl -H "Content-Type: appl
cat
输出传递给curl:
$ cat file | curl --data '{"title":"mytitle","input":"-"}' http://api
但是输入
实际上是一种-
尝试
curl --data '{"title":"mytitle","input":"'$(cat file)'-"}' http://api
我花了一段时间试图弄明白这一点,并通过以下方式实现了:
cat data.json | curl -H "Content-Type: application/json" -X POST --data-binary @- http://api
您可以使用神奇的stdin文件
/dev/stdin
cat data.json | curl -H "Content-Type: application/json" -X POST -d "$(</dev/stdin)" http://api
cat data.json | curl-H”内容类型:application/json“-X POST-d”$(这也应该可以
curl -H "Content-Type: application/json" -d @data.json http://api
使用-d强制curl隐式地使用POST进行请求。
如果以字母@开头数据,其余的应该是从中读取数据的文件名,或者-如果要从stdin中读取数据,则可以指定多个文件。从名为“foobar”的文件中过帐数据将使用-d,-data@foobar来完成。当要求从这样的文件中读取数据时,回车和newlin如果您不希望@字符有特殊的解释,请使用--data raw
根据您的HTTP端点、服务器配置,您应该使用以下格式:
curl-d@data.jsonhttp://api
听起来像是要将输入的内容包装在一个JSON正文中,然后通过POST请求将其发送过来。我认为最简单的方法是首先操作stdin,然后使用-d@
将其推到curl上。一种方法可能如下:
cat <(echo '{"title":"mytitle","input":"') file <(echo '"}') \
| curl -d @- http://api
cat如果希望在不转义或污染bash历史记录的情况下键入/粘贴数据,则可以使用
cat | curl-H'内容类型:application/json'http://api -d@-
这会让您进入cat
,在那里您可以直接输入数据,例如在终端中使用Shift+Insert。最后是换行符和Ctrl+D,这会向cat
发出完成的信号。然后,该数据会传递到curl,并且您有一个可重用的历史记录条目。\35;创建输入文件
echo-n'Try我不确定这里是否有特殊格式,否则这可能是您想要的:问题是文件的内容将是JSON数据中输入的值。我一直忘记@
符号:(您应该知道,-d
跳过\n
和\r
字符。这就是为什么我总是使用--数据二进制
的原因,如果/dev/stdin
是25MB,比如在我的用例中,我需要上传一个25MB的文件,25MB的base64文本对于bash参数来说太多了?请注意字符串替换,尤其是这可能会微妙地损坏您的数据(例如,去掉尾随的换行符或删除NUL后面的所有内容)。这在bash中非常有效,但在zshYes中读取/dev/stdin:Input/output error
时会产生错误!非常适合数据大小超过bash参数可以处理的情况。注释“-d@-选项告诉curl从STDIN读取数据。“非常有用。有没有办法删除不属于文件
的另外两个换行符?刚刚意识到我们可以使用| tr-d'\n'
删除引入的换行符。