ใช้ wget อะไรคือคำสั่งที่ถูกต้องในการรับ gzipped แทนที่จะเป็น HTML จริง


18

ฉันสะดุดกับเว็บไซต์นี้ที่พูดถึงเรื่องนี้

ดังนั้นเมื่อดาวน์โหลดทั้งเว็บไซต์โดยรับรุ่น gzipped คำสั่งที่ถูกต้องคืออะไร?

ฉันได้ทดสอบคำสั่งนี้ แต่ไม่ทราบว่าจะรับเวอร์ชัน 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 ของการโจมตีครั้งแรกโดยไม่ต้องทำการเรียกดูซ้ำอีกครั้งผ่านเว็บไซต์ นั่นคือผลลัพธ์ที่คุณได้รับหรือไม่?
Caleb

linux.about.com มีการบีบอัด gzip และคำสั่งนี้จะเรียกคืนทั้งไซต์ ฉันได้ทดสอบคำสั่งนี้ในเว็บไซต์อื่นและมันทำให้ทั้งเว็บไซต์กลับมาเหมือนกัน Thats ทำไมฉันบิตสับสนว่าจริงๆมันดาวน์โหลดรุ่น 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 = "ยอมรับการเข้ารหัส: gzip" linux.about.com ประเภทเนื้อหา: text / html
EightBitTony

เนื่องจากเบราว์เซอร์บางรุ่นไม่รองรับการเข้ารหัส gzip (IE มีปัญหาที่สำคัญ) เว็บไซต์จำนวนมากเปิดใช้งานการเข้ารหัส gzip ในแต่ละเบราว์เซอร์เท่านั้นและไม่ต้องกังวลกับการทำเช่นนั้น นั่นอาจอธิบายได้ว่าทำไม linux.about.com จึงไม่ gzip เมื่อถูกถามโดย 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)
Peter Cordes

ฉันชอบทำ "-O -" เพื่อให้หน้าไป stdout แล้วสอดเข้าไปใน gunzip เพื่อให้แน่ใจว่ามันอ่านไม่ออกและเล็กเมื่อไม่ได้ส่งผ่าน gzip และใหญ่และ html เมื่อส่งผ่าน gzip ...
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.