Используя wget, какова правильная команда, чтобы получить версию в сжатом виде вместо реального HTML

18

Я наткнулся на этот сайт, который говорит об этом.

Так что, при загрузке всего сайта с помощью gzip-версии, какая команда подходит?

Я протестировал эту команду, но я не знаю, действительно ли wget получит версию gzipped:

wget --header="accept-encoding: gzip" -m -Dlinux.about.com -r -q -R gif,png,jpg,jpeg,GIF,PNG,JPG,JPEG,js,rss,xml,feed,.tar.gz,.zip,rar,.rar,.php,.txt -t 1 http://linux.about.com/
jomnana
источник
Вы говорите, что протестировали эту команду, но ответ @ EightBitTony ниже, похоже, говорит о том, что из этого вы получите gzip-файл первого попадания без какой-либо рекурсии по сайту на сайте для получения дополнительных файлов. Это был результат, который вы получили?
Калеб
linux.about.com сжат gzip, и эта команда повторяет весь сайт. Я проверил эту команду на другом веб-сайте, и она распространяется и на весь сайт. Вот почему я немного запутался, действительно ли это скачать версию в сжатом виде или нет
jomnana

Ответы:

19

Если вы запрашиваете содержимое gzip (используя заголовок accept-encoding: gzip, что правильно), то, насколько я понимаю, wget не сможет затем прочитать содержимое. Таким образом, вы получите один сжатый файл на диске для первой попавшейся страницы, но без другого контента.

То есть вы не можете использовать wget для запроса содержимого в формате gzip и одновременного просмотра всего сайта.

Я думаю, что есть патч, который позволяет wget поддерживать эту функцию, но его нет в версии по умолчанию.

Если вы включите флаг -S, вы сможете определить, отвечает ли веб-сервер правильным типом контента. Например,

wget -S --header="accept-encoding: gzip" wordpress.com
--2011-06-17 16:06:46--  http://wordpress.com/
Resolving wordpress.com (wordpress.com)... 72.233.104.124, 74.200.247.60, 76.74.254.126
Connecting to wordpress.com (wordpress.com)|72.233.104.124|:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Server: nginx
  Date: Fri, 17 Jun 2011 15:06:47 GMT
  Content-Type: text/html; charset=UTF-8
  Connection: close
  Vary: Accept-Encoding
  Last-Modified: Fri, 17 Jun 2011 15:04:57 +0000
  Cache-Control: max-age=190, must-revalidate
  Vary: Cookie
  X-hacker: If you're reading this, you should visit automattic.com/jobs and apply to join the fun, mention this header.
  X-Pingback: http://wordpress.com/xmlrpc.php
  Link: <http://wp.me/1>; rel=shortlink
  X-nananana: Batcache
  Content-Encoding: gzip
Length: unspecified [text/html]

Кодировка содержимого четко гласит gzip, однако для linux.about.com (в настоящее время),

wget -S --header="accept-encoding: gzip" linux.about.com
--2011-06-17 16:12:55--  http://linux.about.com/
Resolving linux.about.com (linux.about.com)... 207.241.148.80
Connecting to linux.about.com (linux.about.com)|207.241.148.80|:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Date: Fri, 17 Jun 2011 15:12:56 GMT
  Server: Apache
  Set-Cookie: TMog=B6HFCs2H20kA1I4N; domain=.about.com; path=/; expires=Sat, 22-Sep-12 14:19:35 GMT
  Set-Cookie: Mint=B6HFCs2H20kA1I4N; domain=.about.com; path=/
  Set-Cookie: zBT=1; domain=.about.com; path=/
  Vary: *
  PRAGMA: no-cache
  P3P: CP="IDC DSP COR DEVa TAIa OUR BUS UNI"
  Cache-Control: max-age=-3600
  Expires: Fri, 17 Jun 2011 14:12:56 GMT
  Connection: close
  Content-Type: text/html
Length: unspecified [text/html]

Это возвращает текст / HTML.

Поскольку некоторые старые браузеры по-прежнему имеют проблемы с содержимым в кодировке gzip, многие сайты включают его только на основании идентификации браузера. Они часто выключают его по умолчанию и включают его только тогда, когда знают, что браузер может его поддерживать - и обычно они не включают wget в этот список. Это означает, что вы можете обнаружить, что wget никогда не возвращает содержимое gzip, даже если сайт, похоже, делает это для вашего браузера.

EightBitTony
источник
Но у меня есть куча файлов, а не один файл в сжатом формате ... или моя версия wget отличается? (с использованием Ubuntu 11.04)
Джомнана
Если вы используете -S, вы можете видеть заголовки, возвращаемые с сервера, а когда вы делаете это с linux.about.com, вы можете ясно видеть, что он возвращает html, а не gzip контент. wget -S --header = "accept-encoding: gzip" linux.about.com Тип содержимого: текст / html
EightBitTony
Поскольку не все браузеры поддерживают кодировку gzip (IE имеет серьезные проблемы), многие веб-сайты поддерживают кодирование gzip только для каждого браузера и не беспокоятся о том, чтобы сделать это для wget. Это, вероятно, объясняет, почему linux.about.com не выполняет gzip при запросе wget. Но это не решает основную проблему, заключающуюся в том, что (AFAIK) wget не может обработать сжатый контент.
EightBitTony
1
Только что попробовал это: вывод wget все еще есть Content-Type: text/html; charset=UTF-8, но есть Content-Encoding: gzip. Это не было бы прозрачным сжатием, если бы его использование заставляло тип MIME всего gzip ... Я побежал, strace -s 128 wget ...чтобы фактически увидеть некоторые байты, прочитанные из сокета / записанные на диск. Они не ASCII. Поэтому, хотя я думаю, что в 2011 году ваша команда не получила версию в формате gzip, в 2015 году эта же команда получила. (wget 1.15).
Питер Кордес
Мне нравится делать "-O -", чтобы страница перешла на стандартный вывод, а затем направить ее в gunzip, чтобы убедиться, что она искажена и мала, когда не пропущен через gzip, и html, когда пропущен через gzip ...
nroose
0

Простая команда, чтобы получить HTML-страницу и сжать ее или получить любой файл и сжатый.

$ wget -qO - <url> | gzip -c > file_name.gz

Для получения дополнительной информации о опции. используйте команду man.

Хафиз Шехбаз Али
источник
2
OP хочет, чтобы данные были сжаты во время их передачи (accept-encoding: gzip), а не после
xhienne