我正在寻找一种方法来进行一次卷曲调用并从中获取变量:一个带有标题,另一个带有响应体.
我发现了几个问题,询问如何将标题与正文分开,但人们似乎只对其中一个感兴趣.我需要标题和正文.
我不能使用外部文件来存储正文(因此使用-o $文件不是一个选项).
我可以用
headers=$(curl -D /dev/stdout $URL)
非常感谢!
head=true while IFS= read -r line; do if $head; then if [[ -z $line ]]; then head=false else headers+=("$line") fi else body+=("$line") fi done < <(curl -sD - "$url" | sed 's/\r$//') printf "%s\n" "${headers[@]}" echo === printf "%s\n" "${body[@]}"
要将数组的元素连接到单个标量变量:
the_body=$( IFS=$'\n'; echo "$body[*]" )
在bash 4.3中,您可以使用命名引用来简化从“标题”模式到“正文”模式的切换:
declare -n section=headers while IFS= read -r line; do if [[ $line = $'\r' ]]; then declare -n section=body fi section+=("$line") done < <(curl -sD - "$url")
出于某种原因,格伦杰克曼的回答没有抓住身体部分的反应.我不得不将curl请求分成另一个命令扩展,然后用双引号括起来.然后我没有使用数组,只是将值连接到变量.这对我有用:
output=$(curl -si -d "" --request POST https://$url) head=true while read -r line; do if $head; then if [[ $line = $'\r' ]]; then head=false else header="$header"$'\n'"$line" fi else body="$body"$'\n'"$line" fi done < <(echo "$output")
谢谢你,格伦!