我如何通过cURL发送etag?也可以像COOKIEJAR一样用cURL保存etag吗?
从标题中我看到了这个
我的GET请求
GET /Vpreviews/p/8b329b598fcdad4fd33432e78128da48f7219882.fll? e=1332973900&ri=4500&rs=75&h=bca0ce28998e637f27cf1d5c7042e7a0 HTTP/1.1
Host: veoh-139.vo.llnwd.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0.1) Gecko/20100101 Firefox/8.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
DNT: 1
Connection: keep-alive
服务器响应
HTTP/1.1 200 OK
Server: Veoh-1.5 (lighttpd-1.4.18)
Content-Type: video/x-flv
Accept-Ranges: bytes
Etag: "8b329b598fcdad4fd33432e78128da48f72198829640882"
User-Header: X-llnw-rate-limit: ri=4500, rs=98
Age: 162476
Date: Wed, 28 Mar 2012 22:06:41 GMT
Last-Modified: Sun, 01 Jan 2012 13:29:44 GMT
Expires: Mon, 27 Mar 2017 06:02:35 GMT
Content-Length: 9640882
Connection: keep-alive
答案 0 :(得分:22)
看看这个Railscast。在演示说明中,您可以看到使用curl抓取带有cookie和ETag的页面的示例。
基本上,你使用'If-None-Match'标题传递它:
curl -I http://localhost:3000/books/1 --header 'If-None-Match: "0f46357eafa5c719e8e3bf277a993e07"'
答案 1 :(得分:11)
首先,Curl只是一个执行http请求的实用程序。它不会自动记录响应标头,例如Cookie或ETag标头。
但是,例如,您可以使用--dump-header
选项将标头写入文件,并从转储文件中提取搜索到的标头,并在下一个请求中使用它。
curl --dump-header header_dump www.google.no
至于发送ETag,我猜你想要执行条件GET请求。也就是说,如果自上次请求以来资源已被修改,您希望指示您只对200 OK响应感兴趣的服务器(或实际上是应用程序)。
如果这就是您所追求的,您可以通过在请求中添加If-None-Match:标头来实现此目的:
curl -I -v --header 'If-None-Match: "1d30-4c993ec28581d"' http://httpd.apache.org
注意上面的标题如何用单引号括起来,而Etag值用双引号括起来。除非你这样做,否则它将无效。
如果Etag匹配,你应该得到304响应:
HTTP/1.1 304 Not Modified
Date: Tue, 18 Sep 2012 11:02:17 GMT
Server: Apache/2.4.1 (Unix) OpenSSL/1.0.0g
ETag: "1d30-4c993ec28581d"
答案 2 :(得分:3)
Etags只是一个Http请求标题,就像卷曲的观点一样。
所以你可以使用:
curl -v -H 'If-None-Match: 123456789' http:your.server.com/your/path/here
其中 123456789 是您从第一次请求中获得的Etag的值。