Використовуючи wget, яка правильна команда отримати gzipped версію замість фактичного HTML


18

Я натрапив на цей веб-сайт, який розповідає про це.

Отже, коли ви завантажуєте весь веб-сайт, отримуючи gzipped версію, яка правильна команда?

Я перевірив цю команду, але не знаю, чи 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/

Ви кажете, що ви перевірили цю команду, але відповідь @ EightBitTony, наведена нижче, каже, що те, що у вас вийде, - це файл gzip першого звернення без рекурсії через сайт для отримання більше файлів. Це був результат, який ти отримав?
Калеб

linux.about.com стискається gzip, і ця команда повторює весь сайт. Я перевірив цю команду на іншому веб-сайті, і вона повторює весь сайт також. Ось чому я трохи заплутався, чи дійсно це завантажують gzipped версію чи ні
jomnana

Відповіді:


19

Якщо ви запитуєте вміст gzip'ed (використовуючи правильний заголовок accept-encoding: gzip), я розумію, що wget не може прочитати вміст. Таким чином, ви отримаєте один, gzipped файл на диску для першої сторінки, на яку ви потрапили, але іншого вмісту немає.

тобто ви не можете використовувати wget для запиту gzipped вмісту та повторного повторного відвідування всього сайту одночасно.

Я думаю, є патч, який дозволяє 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, навіть якщо сайт, здається, робить це для вашого браузера.


Але я отримав купу файлів, а не один gzipped файл ... чи моя версія wget відрізняється? (використовуючи Ubuntu 11.04)
jomnana

Якщо ви використовуєте -S, ви можете бачити заголовки, повернені з сервера, і коли ви робите це проти linux.about.com, ви можете чітко бачити, що він повертає HTML, а не вміст gzip. wget -S --header = "accept-encoding: gzip" linux.about.com Тип вмісту: text / html
EightBitTony

Оскільки не всі браузери підтримують gzip-кодування (у IE є основні проблеми), багато веб-сайтів дозволяють кодувати gzip лише на кожному веб-переглядачі і не турбуються робити це за wget. Це, мабуть, пояснює, чому linux.about.com не gzip, коли запитує wget. Але це не виправляє основну проблему, що wget (AFAIK) не може повторити gzipped вміст.
EightBitTony

1
Щойно спробував це: вихід wget все ще є Content-Type: text/html; charset=UTF-8, але є також Content-Encoding: gzip. Це не було б прозорим стисненням, якби його використання змусило тип MIME всього, щоб gzip ... Я побіг, strace -s 128 wget ...щоб насправді побачити деякі байти, прочитані з сокета / записані на диск. Вони не є ASCII. Тож, як я думаю, у 2011 році ваша команда не отримала gzipped версії, у 2015 році зробила та сама команда. (wget 1.15).
Пітер Кордес

Мені подобається робити "-O -", щоб сторінка переходила до stdout, а потім передавала її в gunzip, щоб переконатися, що вона є одягненою та маленькою, коли вона не проходить через gzip та big та html, коли проходить через gzip ...
nroose

0

проста команда отримати HTML-сторінку та стиснути її або отримати будь-який файл та стиснути.

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

для отримання додаткової інформації про варіант. використовувати команду man.


2
ОП хоче, щоб дані стискалися під час їх передачі (прийом-кодування: gzip), а не після
xhienne
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.