wgetを使用して、実際のHTMLの代わりにgzipされたバージョンを取得する正しいコマンドは何ですか


18

私はこれについて話しているこのウェブサイトにつまずいた。

それで、gzipされたバージョンを取得してWebサイト全体をダウンロードするとき、正しいコマンドは何ですか?

このコマンドをテストしましたが、wgetが実際にgzip圧縮されたバージョンを取得しているかどうかはわかりません。

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圧縮されており、このコマンドはサイト全体を再帰します。このコマンドを他のWebサイトでテストしましたが、サイト全体も再帰しま​​す。それが、gzipされたバージョンを実際にダウンロードするかどうか少し混乱した理由です
-jomnana

回答:


19

(accept-encoding:gzipヘッダーを使用して)gzipされたコンテンツを要求する場合、wgetはコンテンツを読み取れないことを理解しています。したがって、ヒットした最初のページについては、ディスク上のgzip圧縮された単一のファイルになりますが、他のコンテンツはありません。

つまり、wgetを使用してgzip圧縮されたコンテンツを要求したり、サイト全体を同時に再帰したりすることはできません。

wgetがこの機能をサポートできるようにするパッチがあると思いますが、デフォルトの配布バージョンにはありません。

-Sフラグを含めると、Webサーバーが正しいタイプのコンテンツで応答しているかどうかを確認できます。例えば、

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]

text / htmlを返しています。

一部の古いブラウザではgzipでエンコードされたコンテンツにまだ問題があるため、多くのサイトではブラウザの識別に基づいてのみ有効にします。彼らはしばしばデフォルトでそれをオフにし、ブラウザがそれをサポートできることを知っているときだけそれをオフにします-そして彼らは通常そのリストにwgetを含めません。これは、ブラウザでサイトがgzipコンテンツを返さないように見える場合でも、wgetがgzipコンテンツを返さないことがわかる場合があることを意味します。


しかし、1つのgzip圧縮されたファイルではなく、たくさんのファイルを取得しました...または、wgetのバージョンは異なりますか?(Ubuntu 11.04を使用)
jomnana

-Sを使用すると、サーバーから返されたヘッダーが表示され、linux.about.comに対してヘッダーを表示すると、gzipコンテンツではなくhtmlが返されていることがはっきりとわかります。wget -S --header = "accept-encoding:gzip" linux.about.com Content-Type:text / html
EightBitTony

すべてのブラウザがgzipエンコーディングをサポートしているわけではないため(IEには大きな問題があるため)、多くのWebサイトはブラウザごとにのみgzipエンコーディングを有効にし、wgetでそれを実行しません。おそらく、wgetから尋ねられたときにlinux.about.comがgzipを実行しない理由を説明しています。ただし、(わかっている)wgetがgzip圧縮されたコンテンツを再帰できないという主な問題は解決しません。
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を介してパイプされていない場合は文字化けして小さく、gzipを介してパイプされている場合は大きくてhtmlであることを確認します...
nroose

0

htmlページを取得して圧縮するか、任意のファイルを取得して圧縮する簡単なコマンド。

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

オプションの詳細については。manコマンドを使用します。


2
OPは、データがその転送中に圧縮されることを望んで(受け入れエンコード:gzipで)、ではないの後
xhienne
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.