在测试服务时,可能需要curl以post方式提交json数据。
如果数据比较复杂,可能需要保存数据为json文件,然后curl提交。
这里示例curl如何提交文件格式的json数据,所用示例参考和修改自网络资料。
1 直接提交
1.1 cat filepath辅助
准备一个JSON文件,先cat读取文件后作为curl --data的参数,进行发送curl请求。
$ curl --header "Content-Type: application/json" \
> --data "$(cat ~/Downloads/sample1.json)" \
> --trace-ascii trace-json-data-request.log \
> $server_endpoint
--trace-ascii 跟踪 curl 请求,以便于验证请求。
1.2 @filepath读取
除了使用 cat 命令,另一种方法是使用 @file 让 curl 读取文件内容。
$ curl --header "Content-Type: application/json" \
> --data "@~/Downloads/sample1.json" \
> --trace-ascii trace-json-data-request.log \
> $server_endpoint
trace-json-data-request.log 文件以确认数据已成功发送:
$ grep --max-count=1 --after-context=2 "Send data" trace-json-data-request.log
=> Send data, 65 bytes (0x41)
0000: {. "fruit": "Apple",. "size": "Large",. "color": "Red".
0040: }
2 先读取后提交
2.1 读取文件到变量
在Linux中,可以使用shell脚本的方式来读取文件内容到变量中。
有以下几种方法:
file.txt是要读取的文件名,file_content是保存文件内容的变量名
使用cat命令读取文件内容,并使用重定向符将输出结果赋值给变量
file_content=$(cat file.txt)
使用<符号将文件内容传递给命令,然后使用命令替换将结果赋值给变量:
file_content=$(<file.txt)
2.2 curl发送变量内容
变量内容直接作为--data的参数,进行发送curl请求。
curl --header "Content-Type: application/json" \
> --data "$file_content" \
> --trace-ascii trace-json-data-request.log \
> $server_endpoint
reference
使用cURL通过文件发送POST请求指南
https://www.baeldung-cn.com/curl-send-post-request-data-from-file
linux中怎么用shell读取文件内容到变量