![在 CURL 数据中嵌入“cat 文件”](https://linux22.com/image/69416/%E5%9C%A8%20CURL%20%E6%95%B0%E6%8D%AE%E4%B8%AD%E5%B5%8C%E5%85%A5%E2%80%9Ccat%20%E6%96%87%E4%BB%B6%E2%80%9D.png)
我想捕获 a 的内容file.txt
并将其用作--data
我的curl 查询中字段的一部分。
我试过:
curl ... --data '{ "file_content":[" $(cat file.txt) ", ...]}"' ...
但这会将字符串传递$(cat file.txt)
给服务器,而不是在发送之前对其进行解释。
我也尝试过:
curl ... --data '{ "file_content":[" `cat file.txt` ", ...]}"' ...
同样,按原样传递字符串而不是解释它。
答案1
如果您可以从等式中删除外壳,您可能不需要其中的 3 个反斜杠。幸运的是,您可以:
{ printf '{ "file_content":["'
cat file.txt
printf '", ...]}"'
}| curl ... --data-binary @-
看着man curl
。我建议密切关注之间的差异--data-ascii
(就是这个-d
意思),--data-binary
, 和--data-urlencoded
。
答案2
curl -d "$(cat /path/to/my/file.txt)" -X POST http://<your_base_URL>/api/v1/endpoint
测试了这个并且它有效。如果您想将所有内容都放在 file_content 键上,则必须小心引用,因为您所编辑的文件中可能包含任意数量的引号。