использование cURL и etag? - PullRequest
15 голосов
/ 29 марта 2012

как бы я отправил etag поверх cURL? также может ли cURL сохранить этаг, как это делает 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 ]

23 голосов
/ 05 апреля 2012

Взгляните на это Railscast .В заметках к шоу вы можете увидеть примеры использования curl для захвата страницы с файлами cookie и ETag.

По сути, вы передаете его с заголовком If-None-Match:

curl -I http://localhost:3000/books/1 --header 'If-None-Match: "0f46357eafa5c719e8e3bf277a993e07"'
12 голосов
/ 18 сентября 2012

Прежде всего, 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"
3 голосов
/ 01 июня 2012

Etags - это просто заголовок запроса Http, как и любой другой с точки зрения завитков.

Так что вы можете просто использовать:

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

, где 123456789 значение Etag, которое вы получили по первому запросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...