You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在BASH中用CURL仅将POST提交的键值对保存到日志文件?

几种仅记录POST键值对的高效方案

方案1:将POST数据存入变量,一次性提交并记录

把所有提交的键值对统一存到变量中,既可以传给curl执行请求,又能直接写入日志,避免重复编写内容:

log="/path/to/your/logfile.log"
# 用&拼接所有键值对,和多个-d参数效果一致
post_data="site=TEST&Contact=Tom&Desc=Remote Location&ID=123"

# 追加写入日志(要覆盖日志就用>)
echo "$post_data" >> "$log"

# 执行curl请求
curl -k -u user:password -s \
  -d "$post_data" \
  -XPOST "https://192.168.0.1/sites/update.php" > /dev/null

如果想保留每个键值对单独一行的可读性,也可以用多行变量:

log="/path/to/your/logfile.log"
post_data=$(cat <<EOF
site=TEST
Contact=Tom
Desc=Remote Location
ID=123
EOF
)

# 写入日志
echo "$post_data" >> "$log"

# 提交时把换行替换成&,适配curl的form格式
curl -k -u user:password -s \
  -d "$(echo "$post_data" | tr '\n' '&')" \
  -XPOST "https://192.168.0.1/sites/update.php" > /dev/null

方案2:用临时文件存储POST数据,复用内容

把键值对写入临时文件,curl从文件读取数据,同时将文件内容复制到日志,适合数据量较大或需要留存原始提交格式的场景:

log="/path/to/your/logfile.log"
temp_data=$(mktemp)

# 写入临时文件
cat > "$temp_data" <<EOF
site=TEST
Contact=Tom
Desc=Remote Location
ID=123
EOF

# 复制内容到日志
cat "$temp_data" >> "$log"

# curl通过--data @file读取提交数据
curl -k -u user:password -s \
  --data @"$temp_data" \
  -XPOST "https://192.168.0.1/sites/update.php" > /dev/null

# 可选:删除临时文件
rm "$temp_data"

方案3:用数组管理键值对,灵活扩展

如果后续需要频繁修改键值对,用数组管理更方便,可动态生成curl参数并统一写入日志:

log="/path/to/your/logfile.log"
# 定义键值对数组
post_fields=(
  "site=TEST"
  "Contact=Tom"
  "Desc=Remote Location"
  "ID=123"
)

# 写入日志:每行一个键值对
printf "%s\n" "${post_fields[@]}" >> "$log"

# 自动生成curl的-d参数:给每个数组元素添加-d前缀
curl -k -u user:password -s \
  "${post_fields[@]/#/-d }" \
  -XPOST "https://192.168.0.1/sites/update.php" > /dev/null

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:38:19