如何使用Bash解析HTTP标头?

jpshook

我需要从正在使用curl的网页标题中获取2个值。我已经能够使用以下方法分别获取值:

response1=$(curl -I -s http://www.example.com | grep HTTP/1.1 | awk {'print $2'})
response2=$(curl -I -s http://www.example.com | grep Server: | awk {'print $2'})

但是我无法弄清楚如何使用单个curl请求像下面那样分别grep值:

response=$(curl -I -s http://www.example.com)
http_status=$response | grep HTTP/1.1 | awk {'print $2'}
server=$response | grep Server: | awk {'print $2'}

每次尝试都会导致错误消息或空值。我确信这只是一个语法问题。

西尔万·勒鲁

完整的bash解决方案。演示如何轻松解析其他标头,而无需执行以下操作awk

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

生产:

302
GFE/2.0
text/html; charset=UTF-8

根据RFC-2616,HTTP标头按照“ ARPA Internet文本消息格式标准”(RFC822)中所述进行建模,其中明确指出了第3.1.2节:

字段名称必须由可打印的ASCII字符组成(即,冒号除外,其值在33.到126.之间的字符,十进制)。字段主体可以由任何ASCII字符组成,CR或LF除外。(尽管CR和/或LF可能出现在实际文本中,但通过展开字段的动作将其删除。)

因此,以上脚本捕获任何符合RFC- [2] 822的标头,但应注意折叠标头除外

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

简化HTTP标头解析

来自分类Dev

简化HTTP标头解析

来自分类Dev

如何使用Spring将'Cookie'标头解析为`javax.servlet.http.Cookie`?

来自分类Dev

如何在Go中解析HTTP标头

来自分类Dev

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

来自分类Dev

如何修改HTTP标头

来自分类Dev

Akka Http关闭标头解析

来自分类Dev

如何使用调解器提取HTTP标头

来自分类Dev

在使用Ruby的OpenUri下载之前如何获取HTTP标头

来自分类Dev

如何使用IHTTPNegotiate添加额外的http标头?

来自分类Dev

如何使用缓存控制和ETag设置http标头

来自分类Dev

如何使用js获取HTTP用户代理标头?

来自分类Dev

如何使用Apache从HTTP响应中删除Server:标头?

来自分类Dev

如何使用HTTP标头启动Android应用?

来自分类Dev

如何使用调解器提取HTTP标头

来自分类Dev

如何使用sessionManager(AFNetworking)设置多个HTTP标头

来自分类Dev

如何解析cURL返回的标头?

来自分类Dev

如何解析重复的标头字段。

来自分类Dev

如何使用标头`postForm`

来自分类Dev

如何在JavaScript中安全地解析Date HTTP标头

来自分类Dev

解析文件并将某些字段用作变量,并在bash中使用标头作为名称

来自分类Dev

无法更改HTTP接受标头-使用其他区域设置解析策略

来自分类Dev

ffmpeg-如何传递HTTP标头?

来自分类Dev

$ .ajax:如何覆盖默认的HTTP标头

来自分类Dev

如何仅从tshark返回Http标头?

来自分类Dev

Restangular:如何获取HTTP响应标头?

来自分类Dev

如何获得响应的HTTP标头?

来自分类Dev

如何查看safari发送的http标头?

来自分类常见问题

使用RestTemplate的HTTP获取标头