加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 在两个分开的变量中获取卷曲响应的标题和正文?

发布时间:2020-12-16 01:24:29 所属栏目:安全 来源:网络整理
导读:我正在寻找一种方法来进行一次卷曲调用并从中获取变量:一个带有标题,另一个带有响应体. 我发现了几个问题,询问如何将标题与正文分开,但人们似乎只对其中一个感兴趣.我需要标题和正文. 我不能使用外部文件来存储正文(因此使用-o $文件不是一个选项). 我可以
我正在寻找一种方法来进行一次卷曲调用并从中获取变量:一个带有标题,另一个带有响应体.

我发现了几个问题,询问如何将标题与正文分开,但人们似乎只对其中一个感兴趣.我需要标题和正文.

我不能使用外部文件来存储正文(因此使用-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 "%sn" "${headers[@]}"
echo ===
printf "%sn" "${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")

谢谢你,格伦!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读