如何在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
相关产品推荐
相关产品推荐

