cURL 和 etag 的用法?

问题描述 投票:0回答:4

如何通过 cURL 发送 etag? cURL 也可以像 COOKIEJAR 一样保存 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
curl http-headers
4个回答
28
投票

看看这个Railscast。 在演示笔记中,您可以看到使用curl 抓取带有cookie 和ETag 的页面的示例。

基本上,您可以使用“If-None-Match”标头传递它:

curl -I http://localhost:3000/books/1 --header 'If-None-Match: "0f46357eafa5c719e8e3bf277a993e07"'

14
投票

首先,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"

4
投票

Etag 只是一个 Http 请求标头,就像从curls 的角度来看的任何其他标头一样。

所以你可以使用:

curl -v -H 'If-None-Match: 123456789' http:your.server.com/your/path/here  

其中 123456789 是您从第一次请求中返回的 Etag 值。


0
投票

Curl 现在有

--etag-save
--etag-compare

https://curl.se/docs/manpage.html#--etag-compare

7.70.0

开始,您应该可以一起使用这些

curl --etag-compare etag.txt --etag-save etag.txt  http://example.org

© www.soinside.com 2019 - 2024. All rights reserved.