curl -sIX HEAD二进制文件

时间:2011-09-01 19:56:01

标签: bash curl couchdb

#!/bin/bash

HEAD=`curl -sIX HEAD http://gert.iriscouch.com/www/test`
echo "$HEAD"
if [[ $HEAD =~ Etag:\ \"(.*)\" ]]; then
 echo "${BASH_REMATCH[1]}"
fi

HEAD=`curl -sIX HEAD http://gert.iriscouch.com/www/test/user.png`
echo "$HEAD"
if [[ $HEAD =~ Etag:\ \"(.*)\" ]]; then
 echo "${BASH_REMATCH[1]}"
fi

在第二个HEAD上,它与Etag不匹配?

HTTP/1.1 200 OK
Server: CouchDB/1.1.0 (Erlang OTP/R14B03)
Etag: "2-bd7278b9cc8b0ddaf7c863102f42f246"
Date: Thu, 01 Sep 2011 19:47:02 GMT
Content-Type: text/plain;charset=utf-8
Content-Length: 207
Cache-Control: must-revalidate

2-bd7278b9cc8b0ddaf7c863102f42f246

HTTP/1.1 200 OK
Server: CouchDB/1.1.0 (Erlang OTP/R14B03)
ETag: "2-bd7278b9cc8b0ddaf7c863102f42f246"
Date: Thu, 01 Sep 2011 19:47:03 GMT
Content-Type: image/png
Content-MD5: SS+3YnbRbRQ4uiJKcnFkdA==
Content-Length: 4003
Cache-Control: must-revalidate
Accept-Ranges: bytes

2 个答案:

答案 0 :(得分:2)

情况不同。

if [[ $HEAD =~ Etag:\ \"(.*)\" ]]; then


Etag: "2-bd7278b9cc8b0ddaf7c863102f42f246"

ETag: "2-bd7278b9cc8b0ddaf7c863102f42f246"

使用

if [[ $HEAD =~ [Ee][Tt][Aa][Gg]:\ \"(.*)\" ]]; then

我希望这会有所帮助

答案 1 :(得分:2)

来自http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2

  

字段名称不区分大小写。

错误在您的代码中,'ETAG','etag','ETag'和'Etag'都是标题值的同等有效表达式。

但是,我在下一个版本(1.2)中更改了CouchDB,以便在“严格按照您发送的内容”原则上始终使用“ETag”。