linux - 如何通过/bin/sh解析HTTP头?

标签 linux bash sh embedded-linux

这里 - How to parse HTTP headers using Bash?有一个非常优雅的解决方案可以在没有 awk 的情况下在 bash 中进行解析:

shopt -s extglob # Required to trim whitespace; see below

while IFS=':' read key value; do
    # trim whitespace in "value"
    value=${value##+([[:space:]])}; value=${value%%+([[:space:]])}

    case "$key" in
       Server) SERVER="$value"
               ;;
       Content-Type) CT="$value"
               ;;
       HTTP*) read PROTO STATUS MSG <<< "$key{$value:+:$value}"
               ;;
    esac
done < <(curl -sI http://www.google.com)
echo $STATUS
echo $SERVER
echo $CT

但是如何将其转换为纯 sh 呢?

我也打算使用 wget 而不是 curl,但似乎我可以处理。

最佳答案

您可以通过在此处文档中使用 read 来修剪空格。使用命名管道“模拟”进程替换。 (进程替换实际上可以在某些操作系统上使用命名管道实现。)

mkfifo headers
curl -sI http://www.google.com > headers &

{
  # This line is guaranteed to be first, before any headers.
  # Read it separately.
  read -r PROTO STATUS MSG
  while IFS=':' read -r key value; do
      # trim whitespace in "value"
      read -r value <<EOF
$value
EOF

      case $key in
         Server) SERVER="$value"
                 ;;
         Content-Type) CT="$value"
                 ;;
      esac
  done
} < headers
rm headers

我把它留作练习,研究如何正确缩进此处文档的正文。

关于linux - 如何通过/bin/sh解析HTTP头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39819547/

相关文章:

python - 如何在我的红帽服务器上运行 python 文件?

linux - 将多个文件更改为可执行简化的脚本

linux - Fedora 17 中的 yum 更新速度极慢

c++ - clGetPlatformIDs 在 linux 上安装 intel 时返回 -1001

linux - 以反向管道将 gzip 文件 grep 到尾部/头部的快速方法

bash - 使用 shell 脚本从具有指定条件的行中获取特定的列值

python - 在 python 中复制 shell 环境以执行 bash 命令

linux - 什么是插入文件?什么是插入式目录?如何编辑systemd服务

linux - printf 从左侧填充除零以外的数字

bash - 为什么要以间接方式在sh脚本中测试是否相等?