Подтвердить что ты не робот

Использование 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
4b9b3361

Ответ 1

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

В принципе, вы передаете его с заголовком "If-None-Match":

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

Ответ 2

Прежде всего, 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

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

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

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

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