использование cURL и etag?
как бы я отправил etag через cURL? также может cURL сохранить etag, как это происходит с COOKIEJAR?
из заголовков я вижу это
мой запрос 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
3 ответов
взгляните на это Railscast. В Заметках show вы можете увидеть примеры использования curl для захвата страницы с куки и ETags.
в основном, вы передаете его с заголовком "If-None-Match":
curl -I http://localhost:3000/books/1 --header 'If-None-Match: "0f46357eafa5c719e8e3bf277a993e07"'
прежде всего, 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"
Etags - это просто заголовок Http-запроса, как и любой другой с точки зрения curls.
Так что вы можете просто использовать:
curl -v -H 'If-None-Match: 123456789' http:your.server.com/your/path/here
здесь 123456789 - это значение Etag, которое вы получили от своего первого запроса.