Menggunakan wget, Apa perintah yang tepat untuk mendapatkan versi yang di-gzip alih-alih HTML yang sebenarnya

18

Saya menemukan situs web ini yang membicarakan hal ini.

Jadi ketika mengunduh seluruh situs web dengan mendapatkan versi yang di-gzip, apa perintah yang benar?

Saya sudah menguji perintah ini, tetapi saya tidak tahu apakah wget benar-benar mendapatkan versi yang di-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/
jomnana
sumber
Anda mengatakan Anda telah menguji perintah itu, tetapi jawaban @ EightBitTony di bawah ini sepertinya mengatakan bahwa apa yang akan Anda dapatkan dari itu akan menjadi file gzip dari hit pertama tanpa rekursi melalui situs situs untuk lebih banyak file. Apakah itu hasil yang Anda dapatkan?
Caleb
linux.about.com dikompresi dengan gzip, dan perintah ini mengulang seluruh situs. Saya telah menguji perintah ini di situs web lain dan itu juga mengurusi seluruh situs. Itulah mengapa saya agak bingung apakah itu benar-benar mengunduh versi yang di-gzip atau tidak
jomnana

Jawaban:

19

Jika Anda meminta konten gzip (menggunakan header accept-encoding: gzip, yang benar), maka menurut saya wget tidak dapat membaca konten tersebut. Jadi Anda akan berakhir dengan satu file, gzip pada disk, untuk halaman pertama yang Anda tekan, tetapi tidak ada konten lain.

yaitu Anda tidak dapat menggunakan wget untuk meminta konten yang di-gzip dan untuk mengulang kembali seluruh situs secara bersamaan.

Saya pikir ada tambalan yang memungkinkan wget untuk mendukung fungsi ini tetapi tidak dalam versi distribusi default.

Jika Anda menyertakan flag -S, Anda dapat mengetahui apakah server web merespons dengan jenis konten yang benar. Sebagai contoh,

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]

Pengkodean konten dengan jelas menyatakan gzip, namun untuk linux.about.com (saat ini),

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]

Ini mengembalikan teks / html.

Karena beberapa browser lama masih memiliki masalah dengan konten yang disandikan gzip, banyak situs hanya mengaktifkannya berdasarkan identifikasi browser. Mereka sering mematikannya secara default dan hanya mematikannya ketika mereka tahu browser dapat mendukungnya - dan mereka biasanya tidak memasukkan wget dalam daftar itu. Ini berarti Anda mungkin menemukan wget tidak pernah mengembalikan konten gzip bahkan jika situs tersebut melakukannya untuk browser Anda.

EightBitTony
sumber
Tapi saya punya banyak file, dan bukan file tunggal yang di-gzip ... atau apakah versi wget saya berbeda? (menggunakan Ubuntu 11.04)
jomnana
Jika Anda menggunakan -S, Anda dapat melihat tajuk yang dikembalikan dari server, dan ketika Anda melakukannya terhadap linux.about.com, Anda dapat dengan jelas melihatnya mengembalikan html, bukan konten gzip. wget -S --header = "accept-encoding: gzip" linux.about.com Tipe Konten: teks / html
EightBitTony
Karena tidak semua browser mendukung encoding gzip (IE memiliki masalah besar), banyak situs web hanya mengaktifkan encoding gzip pada basis per browser dan tidak repot melakukannya untuk wget. Itu mungkin menjelaskan mengapa linux.about.com tidak gzip ketika ditanya oleh wget. Tapi itu tidak memperbaiki masalah utama yang (AFAIK) wget tidak bisa kembalikan konten gzipped.
EightBitTony
1
Baru saja mencoba ini: output wget masih Content-Type: text/html; charset=UTF-8, tetapi ada juga Content-Encoding: gzip. Tidak akan kompresi transparan jika menggunakannya memaksa tipe MIME segalanya untuk gzip ... Aku berlari strace -s 128 wget ...untuk benar-benar melihat beberapa byte dibaca dari socket / ditulis ke disk. Mereka bukan ASCII. Jadi sementara saya pikir pada tahun 2011 perintah Anda tidak menerima versi gzip, pada tahun 2015 perintah yang sama melakukannya. (wget 1,15).
Peter Cordes
Saya suka melakukan "-O -" untuk mendapatkan halaman akan stdout dan kemudian pipa itu ke gunzip untuk memastikan bahwa itu kacau dan kecil ketika tidak disalurkan melalui gzip dan besar dan html ketika disalurkan melalui gzip ...
nroose
0

perintah sederhana untuk mendapatkan halaman html dan mengompresnya atau mendapatkan file apa saja dan dikompresi.

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

untuk informasi lebih lanjut tentang opsi ini. gunakan perintah man.

Hafiz Shehbaz Ali
sumber
2
OP ingin data dikompresi selama transfer mereka (accept-encoding: gzip), bukan setelah
xhienne