wget을 사용하여 실제 HTML 대신 gzip 버전을 가져오는 올바른 명령은 무엇입니까?

wget을 사용하여 실제 HTML 대신 gzip 버전을 가져오는 올바른 명령은 무엇입니까?

나는 우연히 우연히 발견했다이 웹사이트이에 대한 언급은 없습니다.

그렇다면 gzip으로 압축된 버전을 받아 전체 웹사이트를 다운로드할 때 올바른 명령은 무엇입니까?

이 명령을 테스트했지만 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/

답변1

gzip으로 압축된 콘텐츠를 요청하는 경우(올바른 Accept-encoding: gzip 헤더 사용) wget이 콘텐츠를 읽을 수 없다는 것을 이해합니다. 따라서 클릭한 첫 번째 페이지에 대해 디스크에 하나의 gzip 파일만 남고 다른 것은 없습니다.

즉, 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으로 압축된 콘텐츠를 반환하는 것처럼 보이더라도 wget이 결코 gzip으로 압축된 콘텐츠를 반환하지 않는다는 것을 알 수 있다는 것을 의미합니다.

답변2

HTML 페이지를 가져와 압축하거나 파일을 가져와 압축하는 간단한 명령입니다.

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

이 옵션에 대한 추가 정보. 맨 명령을 사용하십시오.

답변3

mikeserv 등에 따르면 bash(버전 4.3 경)에 대한 위의 응답에서 개발자는 LINENO를 유지하는 방법에 대한 IEEE 사양을 채택하여 EXIT 신호의 매개변수가 평가될 때 값이 항상 1로 설정되었습니다. (실제로 이러한 실행 컨텍스트에서는 현재 라인이자 첫 번째 라인입니다.)

몇 가지 해결 방법이 나열되었습니다. 다른 것에 비해 매우 간단하다고 생각하므로 여기에서 이 문제에 대한 개념 증명을 제공하겠습니다.

#!/bin/bash
trap 'catch EXIT $? $debug_line_old' EXIT
trap 'debug_line_old=$debug_line;debug_line=$LINENO' DEBUG # note: debug is invoked before line gets executed!
catch() {
  echo "event=$1, rc=$2, line=$3, file=$0"
}
exit 1

결과를 실행하면 다음이 표시됩니다.

event=EXIT, rc=1, line=7, file=./trap_exit_get_lineno.bash

그런데 - 어떤 종류의 트랩 이벤트도 한 줄로 나누지 않을 때 유용합니다. 별도의 신호에 대해 별도의 줄을 유지하면 코딩에 많은 도움이 됩니다. 둘째, DEBUG Trap은 다른 것을 호출하는 능력이 매우 제한되어 있는 것 같습니다.

관련 정보