我需要从正在使用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] 删除。
我来说两句