웹페이지 로딩 속도를 모니터링 할 수 있는 툴, 뭐가 있을까요 ?

자일자일의 이미지

특정 URL 웹페이지의 로딩 속도를 주기적으로 체크하고 싶습니다.

http watch에서 로딩 속도의 측정이 가능 하긴 한데, 주기적으로 측정이 불가능하네요.

필요한 기능으로는,

웹 브라우져에서와 페이지를 여는것과 동일하게, jsp, html 등의 웹페이지 뿐 아니라, flv, gif등의 이미지 파일까지 받아 와서
전체 로딩 속도를 체크해보고 싶습니다.

물론 주기적으로 체크할 수 있는 설정이 가능해야겠고... 캐쉬파일을 저장하지 않도록 설정할 수 있어 매번 서버에서 정보를
받아올 수 있어야하는데...

웹페이지 속도 체크 프로그램은 다양하게 많이 있는데 웹페이지에 포함된 파일(이미지/플래쉬/스크립트 등..) 까지 받아오는 프로그램은
찾지를 못했습니다.

알고 계신 프로그램이 있다면 도움 부탁합니다.
Windows 프로그램이면 사용이 편리하겠지만, Linux 기반 프로그램이여도 좋습니다. 감사합니다.

cjh의 이미지

로컬이면 http://linux.maruhn.com/sec/getwww.html 이런것도 있고요,

보통은 gomez나 keynotes와 같은 서비스를 많이 사용합니다. 국내에서는
sitechecker와 같은 서비스가 있지요.

--
익스펙토 페트로눔

--
익스펙토 페트로눔

자일자일의 이미지

getwww의 설명을 읽어보면 원하던 기능을 구현할 수 있을 수 있다 생각했는데

설치에 어려움이 있네요. 좀 더 알아봐야겠습니다.

감사합니다.

김정균의 이미지

예전에 http://kldp.org/node/81578 와 같은 포스팅을 한 적이 있습니다. sitechecker 상용 서비스를 하다가, 대체하기 위해서 만든 것입니다.

monovision의 이미지

전.... cron 에 wget 으로 체크를 해본적이 있군요 ㅎㅎ...;;;
그나저나 링크 걸어주신.. getwww 에서 아래 부분은 인상적이군요.. @..@

README file is written in korean
자일자일의 이미지

wget으로는 단일파일밖에 체크할 수 없어 제가 웹페이지 로딩 속도를 체크하기에는 부적합해서요^^
말씀하신 getwww는 한국분이 만드셨더라구요. 95년정도에 만들어진듯하네요 사용할 수 있으면 좋을텐데
설치에 어려움이 있네요.

혹시 궁금하신분들을 위해 readme 파일 전문 첨부합니다.

README-
개선점이라기 보다는 사용하는데 문제가 있는 점을 고친 것이라
이렇게 빨리 버전업을 하게 되었습니다.

---------------------------------------------------------------------
바뀐 내용.

url 스캔에서 약간의 문제가 있어서 고쳤습니다.
html 헤더정보 처리에 문제가 있어서 고쳤습니다.
user-agent 문제에 대해서 토론이 있었고 적절하게 고쳤습니다.
.GETWWW.SCAN 화일에 받아온 호스트명과 초기 html 화일명을 적게 했습니다.
로컬화일 클린 모드에서 temp 디렉토리를 지우게 했습니다.
SunOS 를 위해서 INADDR_NONE 값을 0xffffffff 로 배정했습니다.
-q 옵션과 -Q 옵션을 서로 바꾸었습니다.
그외 몇가지의 에러수정이 있었습니다.

도움을 주신 분께 감사드립니다. HELPERS 화일에 넣었습니다.

----------------------------------------------------------------------

원하는 url의 모든 웹문서를!!!!

getwww 는 커멘드라인에 적어 준 url의 모든 웹문서를 받아 옵니다.

getwww는 webcopy, snag, wget 과 비교하여 다음과 같은 특징이 있습니다.

1. getwww는 리커전이 기본이며 이론적으로 32767깊이의 트리를 탐색할 수
있습니다.

2. getwww는 가져오는 모든 웹문서의 참조테그를 로컬에 저장한 문서들간의
관계로 변환합니다. 그러므로 한 번 받아온 문서는 넷스케이프에서 검색할
때 더 이상 인터넷과 연결되어 있을 필요가 없습니다.
그러므로 어떤 주제에 대해 잘 정리되어 있는 웹을 받아오면 언제나
볼 수 있는 참조문서가 됩니다.

3. getwww 는 cgi가상문서를 처리할 수 있습니다. cgi-bin?next-html 은
로컬에 cgi-binL--question--.next-html 로 변환되어 저장됩니다.
그러므로 로컬로 읽을 때 에라가 발생하지 않고 마치 참조 html 문서처럼
읽을 수 있습니다.

4. getwww 는 cgi가상문서에 포함된 또 다른 cgi가상문서 혹은 참조 테그를
분석하여 로컬로 가져올 수 있습니다.
그러므로 cgi가상문서는 일반 html 화일과 동일하게 처리되므로 어떠한
에라도 나지 않습니다.
전자신문의 경우에 index.html 에서는 sub_etnews?04 로 참조테그가
정의되며 sub_etnews?04 문서는 etnews_content?199601010040 으로 참조테그가
되어 있습니다. getwww는 이 cgi가상참조테그를
sub_etnewsL----QUESTION.04 으로 변환합니다.

5. getwww는 받는 도중 네트웍에라가 발생할 경우에 조금의 오버헤드없이
받아온 화일을 다시 참조하여 받아오기를 재 실행할 수 있습니다.
-i 옵션은 로컬에 받아온 문서가 있으면 이 화일을 검색하며 로컬에 받아온
화일에서 참조하는 테그가 로컬에 없을 경우 다시 받아올 수 있습니다.

6. getwww 는 지정한 디렉토리만 받기 , 지정한 디렉토리 받지 않기, 지정한
확장자만 받기, 지정한 확장자 받지 않기 , 지정한 스트링이 화일명에
있는 화일만 받기, 지정한 스트링이 있는 화일은 받지 않기 기능이 있습니다.

7. getwww 는 로그인과 비밀번호가 필요한 url도 받아 올 수 있습니다.
(물론 로그인에 필요한 비밀번호는 가지고 있어야 합니다.)

8. getwww 는 동일한 url을 여러번 방문했을 경우에 로컬에 더이상 필요없는
html 문서가 있을 때 깨끗이 청소하는 기능이 있습니다.
(매일 검색하는 뉴스서버의 경우에 그날 받아온 문서가 참조하지 않는
쓰레기 html문서가 엄청나게 됩니다.)

9. 그외에 여러가지 기능이 있습니다. 자세한 것은 아래의 설명서를 읽어 보세요.


getwww 는 제가 한겨레신문, 전자신문, 스포츠신문과 gnustep 사이트, gnu사이트
등을 방문해서 날마다의 뉴스와 여러 주제에 대해 정리된 문서를 가겨오는 목적으로
"실제로"쓰고 있는 프로그램입니다.
webcopy 등의 프로그램은 문서를 가져오는 것에 만족한 수준이며 가져온 문서를
실제로 보는 목저으로는 부적당해 보입니다. 리커젼에도 별 신경을 쓰고 있는
것같지 않고 테그의 로컬처리등도 신경을 쓰고 있는 것같지 않습니다.

많이 사용해 주시고 문제가 있으면 아래에 있는 주소로 알려 주시기 바랍니다.

이 프로그램은 원하는 웹사이트에 있는 문서(그림화일, 음성화일, 자바스크립등등)을
로컬로 한꺼번에 받아서 오프라인으로 읽기 원할 때 사용하는 프로그램입니다.

받아오는 화일은 커멘드라인에 명시된 URL 내의 웹만을 대상으로 합니다. html문서가
참조하는 ftp://, gopher://, news:// 등의 참조테그는 검색하지 않습니다.

로컬로 읽기 위한 목적이므로 받아온 html문서 안의 참조 테그는 로컬 디렉토리의
상대적인 패스로 변경됩니다. 오프라인으로 읽을 때 참조 html 문서가 모두 로컬에
있기 때문에 빠르게 내용을 읽을 수 있습니다.

전화 접속으로 인터넷을 사용하는 분은 계정이 있는 컴퓨터에 두고 실행하여 다 받은
다음에 압축하여 받아오면 직접 넷스케입을 사용하는 것 보다 훨씬 빠르고 전화비도
절약할 수 있습니다.

네트웍이 느린 곳에서 인터넷을 사용하는 분에게도 도움이 될겁니다.

그외에 어떤 주제에 대해서 잘 정리되어 있는 사이트의 문서들을 가져오면 필요할 때
마다 인터넷을 사용하지 않고도 빨리 볼 수 있기 때문에 정보를 모아두는 목적으로도
사용할 수 있습니다.

저는 주로 한계레신문, 스포츠신문, 전자신문등을 날마다 받아 보고 있고 www.w3.org
에 있는 RFC822, HTTP 프로토콜 정의 문서 등을 받는데 사용했습니다.

0. 인스톨

make

하면 됩니다. 컴파일러는 g++ 이 필요합니다. gnu 확장함수도 사용했기 때문에
다른 c++ 컴파일러는 컴파일 되지 않을 것입니다.

linux-2.0.24 (gcc 2.7.2.1)
Irix-5.3, HP-UX 10.01, DEC,
sunos 4.1.1, 4.1.3, Solaris 2.4, 2.5

에서 컴파일할 수 있습니다. 컴파일에 성공하면 getwww 가 생깁니다.

1. 기본적인 사용법

보고 싶은 사이트 명을 아래와 같이 적어 주면 됩니다.

getwww http://a.b.c.d 또는 http://255.255.255.255
getwww http://a.b.c.d:80/ 또는 http://255.255.255.255:80/
getwww http://a.b.c.d/
getwww http://a.b.c.d/first
getwww http://a.b.c.d/first/
getwww http://a.b.c.d:80/first/index.html

host명은 숫자로 표기하든지 문자로 표기하던지 아무 상관이 없습니다.

프락시를 이용하고 싶을 경우에는 아래처럼 써 주세요.

getwww http://a.b.c.d -p http://c.d.e.f:portnum
getwww http://a.b.c.d -p http://c.d.e.f:portnum/

.profile 등에

export HTTP_PROXY="http://c.d.e.f:8080/"

의 설정이 있으면 프로그램이 이 것을 프락시로 사용합니다.

프락시가 문제가 있어서 사용하고 싶지 않을 때는 적지 않으면 됩니다.
프락시 설정이 환경설정에 있고 이 것을 사용하고 싶지 않을 때는

getwww http://a.b.c.d -P

옵션을 사용하면 프락시를 무시합니다.

각종 옵션에 대한 사용법은

getwww -h 입니다.

-------------------------------------------------------------------------
get whole www. c++ version 1.4 kisskiss@soback.kornet.nm.kr
usage : getwww [-c][-i][-n][-q][-Q][-v][-h][-P][-f name][-l user[:passwd]]
[-r num][-R num][-d dir][-D dir][-O cgi-file]
[-s string][-S string][-t string][-T string]
[-p http://c.d.e.f:portnum] http://a.b.c.d[:80][/aa.html]
option :
-c : local file clean -v : debug mode
-i : use exist file -h : show help message
-n : dont cache data -P : not using proxy
-q : quiet mode -Q : very quiet mode
-f name : temp file name
-l user[:passwd] : user name and password for Authorization
-O cgi-file-name : force get cgi file [file_name]
-p http://a.b.c.d:portnum : using proxy
-r ? : reget level (num >= -1)
-R ? : don't care not-modified level (num >= -1)
-d dir : only get file in [dir] directory
-D dir : don't get file in [dir] directory
-s string : only get file has [string] in file name
-S string : don't get file has [string] in file name
-t string : only get end with [string] in file name
-T string : don't get end with [string] in file name
-------------------------------------------------------------------------

2. 받기 원하는 화일의 디렉토리 설정

getwww 는 커멘드라인을 읽어서 첫화일을 받아온 다음
(첫 화일을 한 번 받아온 적이 있어서 이 화일이 로컬에 있고,
리모트화일이 그 후에 변경되지 않았더라도 무조건 읽어 옵니다.)

그 화일을 검색해서 참조 html 문서를 받아오고 다시 이 것을 이용해서 반복적으로
문서들을 받아옵니다. 광고가 있는 디렉토리, 과거화일이 있는 디렉토리등을 받고
싶지 않으면 아래처럼 옵션을 주면 됩니다.

getwww -D old_file_dir -D dont_want_dir http://a.b.c.d
getwww -D old_file_dir dont_want_dir* http://a.b.c.d

want_dir 만 받고 싶으면 -d 옵션을 쓰면 됩니다.

getwww -d want_dir want_dir_* http://a.b.c.d

want_dir 디렉토리만 받고 싶고 want_dir 아래에 want_dir/dont_want_dir 을 받고
싶지 않으면

getwww -d want_dir -D want_dir/dont_want_dir http://a.b.c.d

라고 하면 want_dir 와 want_dir 아래 디렉토리에 있는 화일을 전부 받지만
want_dir/dont_want_dir 의 화일은 받지 않습니다.

-D 옵션이 우선권이 있으므로

getwww -d want_dir -D want_dir http://a.b.c.d

하면 want_dir 을 받아오지 않습니다.

-d,-D 옵션은 여러개를 동시에 사용해도 됩니다.

want_dir 디렉토리와 want_dir2 화일은 받고 dont_dir 과 dont_dir2 를 받고 싶지
않으면 아래 처럼 하면 됩니다.

getwww -d want_dir* -D dont_dir* http://a.b.c.d

커멘드라인에 적어준 첫화일은 -d, -D 옵션에 영향을 받지 않습니다.

getwww -d want_dir http://a.b.c.d

라고 하면 받아오는 화일은 ./index.html 에 쓰게 됩니다.
그러나 index.html 의 참조 테그 중에서 ./ 디렉토리에 있는 화일은 받아오지
않으므로 ./ 디렉토리의 화일들을 받아올려면

getwww -d . -d want_dir http://a.b.c.d

라고 써주세요.

-d . 옵션은 ./ 디렉토리 아래의 디렉토리는 관계하지 않고 ./ 디렉토리의
화일만 받아옵니다.

3. 받기 원하는 화일의 설정

.pdf, .ps, .tar.gz 등으로 끝나는 화일등을 받고 싶지 않을 때에는

getwww -T .pdf .ps tar.gz http://a.b.c.d 또는
getwww -T .pdf -T .ps tar.gz http://a.b.c.d

하면 됩니다.

.tar.gz 라고 하면 aa.tar.gz 는 받지 않고 aatar.gz 는 받습니다.
tar.gz 라고 하면 aa.tar.gz 와 aatar.gz 모두 받지 않습니다.

getwww 는 imagemap 에 대한 처리가 안되므로

getwww -T .map http://a.b.c.d

로 쓰면 좋습니다. 어차피 받아왔더라도 내용은 에라메세지이니까요.

.html 로만 끝나는 화일을 받고 싶을 때에는

getwww -t .html http://a.b.c.d

하면 됩니다. 이 옵션은 그림화일등을 받지않고 html 문서만 가져오고 싶을 때
쓰면 됩니다.

화일 명 중에서 old_file 문자가 있는 화일은 받고 싶지 않으면

getwww -S old_file http://a.b.c.d

로 하면 됩니다. 이 것은 상대편 url이 구버전 화일을 보관하고
있을 때 사용하기 좋은 명령입니다.

한 url 에 여러가지 주제에 대한 문서가 있고 원하는 문서명이 subject1aa1.html
subject1bb1.html 등으로 되어 있어서 이런 화일만 받고 싶으면

getwww -s subject1 http://a.b.c.d

로 하면 됩니다. 일반적으로 html 문서에는 그림등이 들어가므로 이 옵션은
크게 쓸모 있는 것은 아닙니다.

위의 설정은 서로 섞어 쓰더라도 아무 상관이 없습니다. 우선 순위는
"받아오지 말것" 옵션이 더 우선권이 있습니다.

4. 한 url 을 다시 받아 올 때

정상적인 경우라면 원하는 url 을

getwww -T .pdf -S old_file -D advertise -d good_dir . http://a.b.c.d

등으로 받아 와서 쭉 읽어보면 됩니다.

문제는 받다가 네트웍이 다운 되었다던지 사용자가 끝내버렸다던지
상대편 url 이 자주 내용이 갱신되는 뉴스서버 이라던지 하는 경우입니다.

이 경우에는 다시 이 url 을 방문하여 받아 와야 합니다. 이 때 이미 로컬에
받아 놓은 화일은 다시 받게 하지 않고 싶으면

getwww -i http://a.b.c.d

라고 하면 첫화일을 읽은 다음에 받아와야할 문서가 로컬에 있으면 이 것을
받아오지 않고 로컬에 있는 것을 이용합니다. 로컬에 있는 문서의
참조 테그가 로컬에 있으면 다시 이 것을 이용합니다.

즉 -i 옵션은 로컬에 없는 문서는 받아오고 있는 것은 그 것을 검색하여 더
검색할 것이 없을 때 까지 모든 문서를 검색합니다.

5. 다시 받아올 레벨의 설정

만약 상대편의 url이 index.html 은 home.html 을 가르키게 하고 있고
index.html 의 내용은 변경시키지 않고 변경 작업은 home.html 에서 하고 있을 때
(주로 뉴스 url 의 경우)

getwww -i http://a.b.c.d

라고 하면 첫화일을 읽은 다음 index.html이 home.html 을 참조하고 있음을 알고
이 것이 로컬에 있는지 확인하게 됩니다. 이 때 이 url을 전에 읽어 온 적이
있으면 갱신된 리모트의 home.html이 아닌 로컬의 home.html 을 사용합니다.
그래서 로컬의 내용은 바뀌지 않습니다. 이럴 때에는

getwww -i -r ? http://a.b.c.d

라고 하면 됩니다. ? 에는 변하지 않는 문서의 계층수를 적어 주면 됩니다.
최초의 참조 문서는 0 이므로 위와 같을 때는 1 이라고 하면 됩니다.

이 r (리커전 레벨) 보다 적을 때에는 로컬에 화일이 있더라도 다시 리모트에서
받아옵니다.

-r 이 쓰이면 현재 로컬의 화일을 읽어서 생성된 날짜를 리모트에 보냅니다.
상대편의 이 화일이 "보내는 날짜"보다 빠르다면 원하는 화일을 보내 주지 않고
"304, not modified" 상태코드를 보내 줍니다. 이 때에는 로컬의 화일을
사용합니다.

문서화일들을 받아온 후에 디렉토리를 옮겼다던지 에디터등으로 읽고 조금
고쳤다던지 해서 이 화일이 구버전이지만 날짜가 바뀌는 바람에 상대편이
새 화일이라고 판단한다면

getwww -i -R ? http://a.b.c.d

라고 하면 됩니다. 이 명령은 ? 보다 적은 리커전 레벨 내의 화일은 날짜정보를
보내지 않고 무조건 받아 옵니다.

받다가 에라가 나서 getwww 을 중지하고 바로 다시 받아오기를 할 때에는

getwww -i -r -1 http://a.b.c.d (숫자 -1)

라고 하면 첫화일부터 로컬에 있는 것을 이용합니다.

getwww -i -r 2 -R 1 http://a.b.c.d

명령은 날짜비교 없이 받아오는 것은 레벨 1 까지 그 다음에는 레벨 2 까지
로컬에 있는 화일의 날짜와 리모트 화일의 날짜를 비교하여 새것이면 받고
그 다음 부터는 로컬에 있으면 로컬화일을 이용하라는 뜻입니다.

-R 의 레벨은 -r 보다 클 수 없습니다. -R 의 레벨이 크면 자동적으로 -R 의
레벨을 -r 의 레벨로 바꿉니다.

6. cgi 받아오기

cgi 가상문서의 참조테그는

/cgi-bin/main?act=list&key=today

처럼 되어 있습니다. 유닉스계열에서는 화일명으로 ?, & 를 사용할 경우에 문제가
있으므로 '?' 는 L-----QUESTION. 으로 '&' 는 L-----AMPER--. 으로 변환합니다.
이렇게 변한 참조테그는 받아오기를 할 때에는 역변환이 됩니다.
유닉스화일 시스템에서의 문제이므로 신경쓰지 않아도 됩니다.

cgi 문서도 이상없이 받아오고 cgi 가상 문서를 검색해서 그 안에 참조 cgi 가
있다면 이 것도 받아옵니다.

cgi 가상문서는 If-Modified-Since(로컬의 화일이 새 것인지 여부)에 해당하지
않고 요청하면 무조건 보내 주므로 -O (영문 대문자) 옵션이 필요합니다.

getwww -r 2 -O cgi-first_output http://a.b.c.d

하면 됩니다. -O 옵션은 반드시 리커전레벨 내에서 유효하고 그 밖에서는 효과가
없습니다. 물론 리커젼레벨 밖에서는 있으면 받아오지 않습니다.

-O cgi-first_output 은 리커젼 레벨 내에서 받아올 웹이 cgi 가상문서이고
로컬에 있지만 -O 다음에 명시된 화일 명으로 시작 할 경우에 다시 받아
옵니다. 이 화일과 이름이 같지 않은 화일은 로컬에 있을 때 받아오지
않습니다.
c-f_output 이라고 했을 때 c-f_output?1 과 c-f_out?2 등등도 받아 오지
않습니다.

이 옵션은 뉴스서버와 같이 cgi-bin/sports?a 처럼 각 내용을 섹션으로 만들어
놓고 이 내용은 변하지 않고 사용자가 요청하면 cgi-bin/sports?date-19960101과
같이 날짜별로 내용을 보내주는 서버에 쓰면 됩니다.

뉴스서버의 index.html 은 cgi-bin/sports?a 를 테그로 넣어놓고 요청이 있을
때마다 그날의 날짜를 비교하여 cgi-bin/sports?a 문서의 테그는
cgi-bin/sports?today-is-19960101 처럼 만들어서 보내옵니다. 뉴스서버관리자는
각날짜에 따라 today-is-19960101 이라는 문서만 만들면 되기 때문에
관리를 쉽게할 목적으로 이 방법을 사용합니다.

index.html -> cgi-bin/main?first_output -> cgi-bin/main?today.19960101001

이 때에는

getwww -r 2 -O "main?first_output" http://a.b.c.d

로 하면 today.19961225001 등은 로컬에 있을 때 받아오지 않습니다.

물론 -O 는 여러 개를 쓰더라도 상관 없습니다.

7. 웹에서 사용자명과 비밀번호를 요청할 경우

어떤 웹서버에서는 사용자관리와 통계적 목적 혹은 유료목적으로 사용자 명과
비밀번호를 부여하는 경우가 있습니다. 이 때에는

getwww -l username:password http://a.b.c.d

하면 됩니다. 비밀번호에 특수한 코드가 있을 때에는

getwww -l "username:password" http://a.b.c.d

하면 됩니다.

코딩 방법은 base 코딩 즉 uuencode 방식의 간단한 방법이므로 보안에
유의하시기 바랍니다.

getwww -l "user" http://a.b.c.d

라고 하면 getwww가 비밀번호를 요구합니다. 여러 사용자가 사용하는 컴퓨터에서
getwww 를 쓰면 실행중인 프로그램의 커멘드라인을 남이 볼 수 있으므로 이렇게
사용하세요.

8. 생성되는 정보화일에 대해

getwww 는 필요한 정보화일을 최대 5개 만듭니다.

FILE_TEMP = .getwww.tmp
FILE_SCAN = .getwww.scan
FILE_NEW = .getwww.new
FILE_DEBUG = .getwww.deb
FILE_ERROR = .getwww.err

한 디렉토리에서 getwww 를 두개 이상 실행 시킬 때가 있습니다.

한겨레 신문같이 한겨레신문, 시네 21, 한겨레21 등의 디렉토리가 따로 되어
있고 한계레 신문은 매일, 시네 21은 매주 바뀌기 때문에

getwww http://news.hani.co.kr

명령으로 받아오는 것은 루트에서 세가지 잡지 모두를 매일 검색하므로 자원의
낭비입니다. 그럴 때 각각에 대해서

getwww -d hkr http://news.hani.co.kr/hkr
getwww -d cine21 http://news.hani.co.kr/cine21
getwww -d hankr21 http://news.hani.co.kr/hankr21

로 받아오는 것이 좋습니다. 그러나 두개의 프로세스가 동시에 실행되면
참조화일이 겹치기 때문에 문제가 생깁니다. 그러므로 위의 경우에는

getwww -f hkr -d hkr http://news.hani.co.kr/hkr
getwww -f cine21 -d cine21 http://news.hani.co.kr/cine21
getwww -f hankr21 -d hankr21 http://news.hani.co.kr/hankr21

로 실행하면 됩니다. 이 때에는

FILE_TEMP= .getwww.tmp.hkr .getwww.tmp.cine21 .getwww.tmp.hankr21

등등으로 바뀌게 되어 서로 문제 없이 동시에 실행될 수 있습니다.

FILE_TEMP : 지금 처리하고 있는 받아온 문서화일
FILE_SCAN : 검색대상이 된 화일에 대한 목록
FILE_NEW : 실제로 받아오기한 화일과 주고 받은 헤더정보 화일
FILE_DEBUG : html문서를 검색하여 참조 문서를 처리하는 내용을 보여주는 화일
FILE_ERROR : 요청했지만 리모트에 없는 화일, 처리과정에서 에라가 난
화일, 리모트웹 작성자가 실수한 것을 집어낸 내용등이 들어
있는 화일 입니다. (주로 HTTP 를 HTPP,HTTTP 등으로 쓴 것들)

옵션에 -v(debug mode) 를 사용하지 않으면 FILE_NEW 와 FILE_DEBUG 는
만들어지지 않습니다.

-v 옵션을 사용하면 FILE_NEW, FILE_DEBUG, FILE_SCAN 가 만들어지고 에라가
있으면 FILE_ERROR 가 생깁니다.
-v 옵션이 없으면 FILE_SCAN 이 생기고 에라가 있으면 FILE_ERROR 가 생깁니다.

FILE_ERROR 는 리모트 웹 작성자에게 틀린 문서 내용을 알려 주는 데 사용하거나
getwww 프로그램이 잘못한 내용이 있을 때 저에게 프로그램 디버깅 정보를
알려 주는데 사용하시면 됩니다.

9. 유효기간이 지난 웹의 청소

뉴스서버등을 매일 검색하면 로컬에 현재의 html 문서가 참조하지 않는 화일들이
생깁니다.

이 화일들을 청소하려면 먼저 제대로 만들어진 FILE_SCAN 이 필요합니다.

getwww -i -f name http://a.b.c.d (-f name 없어도 됨)

등으로 검색하고 정상적으로 끝나면 현재 html문서가 참조하는 화일들의 목록이
FILE_SCAN 에 남게 됩니다.

getwww -c -f name (getwww -i http://a.b.c.d 로 실행했으면 -f 없이)

으로 실행하면

.getwww.scan(.getwww.scan.name) 화일을 읽어서 여기에 있는 화일을 제외하고는
하위 디렉토리의 쓸데 없는 화일은 모두 지우버리게 됩니다.

한 디렉토리의 하위 디렉토리가 여러개이고 각각의 디렉토리가 서로 다른
url 의 화일을 검색하는 디렉토리이더라도 문제가 없습니다. getwww -c 옵션은
현 디렉토리의 검색된 화일과 참조된 하위 디렉토리만 건들기 때문입니다.

새 화일은 .GETWWW.TMP.DIRECTORY 아래에 디렉토리 구조 그대로 복사한 다음
나머지 화일들은 모두 지우고 나서 다시 원 디렉토리에 그대로 복사합니다.

10. 그외의 옵션들

-n 은 상대편에게 if-modified-since 옵션을 보내지 않고 html문서 받아오기를
하며 no-cache pragma 를 프락시호스트에게 보냅니다. 프락시의 cache 에
담겨 있는 정보를 이용하지 않고 날짜비교도 하지 않고 받아오므로 로컬의
html 문서들이 문제가 있을 때 사용하는 최악의 옵션입니다.

-v 디버그모드는 FILE_DEBUG 화일과 FILE_NEW 화일을 만듭니다.
FILE_DEBUG 는 엄청나게 커지므로 조심하시기 바랍니다.

-q getwww 가 표시하는 화일받아오는 상태 정보를 화면에 뿌리지 않게 하는
옵션입니다. 화면에 뿌려주는 내용이 정신 없거나 백그라운드로 실행할 때
이 옵션을 사용하세요.
이 옵션은 받아온 화일을 조사하는 과정만을 보여주지 않습니다.
받고 있는 화일목록은 보여 줍니다.

-Q 옵션도 마찬가지로 화면에 아무런 정보를 뿌리지 않게 합니다.
이 옵션은 받고 있는 화일에 대한 목록도 전혀 보여 주지 않습니다.
-Q 옵션을 사용하면 -q 옵션도 자동으로 설정 됩니다.

11. 알려진 문제점

11.1 참조테그 문제

a. http://a.b.c.d/aa/index.html
b. http://a.b.c.d/aa/
c. http://a.b.c.d/aa

위 세가지 참조 테그는 같은 문서를 가르키고 있을 수도 있고 아닐 수도
있습니다.

일반적으로 디렉토리 참조(b)일 때 디폴트로 그 디렉토리의 index.html을
보내옵니다. getwww 가 내부적으로 디렉토리 참조일 때는 받은 문서를
aa/index.html 에 씁니다.

만약 리모트가 디렉토리참조일 때 index.html 을 보내지 않고 welcome.html을
보낸다면 http://a.b.c.d/aa/context.html 문서에서 home 버튼을 눌렀을 때의
참초테그로 http://a.b.c.d/aa/ 라고 적혀 있을 것입니다. 리모트에서는
welcome.html 을 보낼 것이고 getwww 는 이 것을 index.html 이라고 생각을
할 것입니다. context.html 문서의 home 버튼에 친절하게 참조테그로
http://a.b.c.d/aa/welcome.html 이라고 적혀 있다면 getwww 는 index.html과
내용이 같은 welcome.html 을 생성할 것입니다. 그러나 문제는 없습니다.
index.html 이나 welcome.html 이나 내용이 똑같으니까요.

복잡하게 들리겠지만 아무 문제 없다는 말씀입니다.

세번째 참조테그 표현법은 상당히 문제가 있습니다. 넷스케입은 이 경우에
우선 "get /aa" 요청을 보냅니다. 결과값이 "200 ok" 이면 내용을 받고
"302 Moved Temporarily" 이면 "get /aa/" 요청으로 바꾸어 보냅니다.
즉 한개의 참조테그에 두번의 중복 요청이 있을 수 있습니다.
넷스케입은 화면에 뿌려 주면 그만이므로 별 문제가 없습니다.
이 결과값을 로컬에 저장하고 이 테그를 적절하게 변환해서 로컬에 저장해야
하는 getwww 는 심각한 문제가 있습니다.

getwww 는 이 요청이 aa 라는 화일에 대한 요청인지 aa/ 라는 디렉토리에 대한
요청인지 확인해야 합니다. 왜냐하면 이 요청을 하는 것이 또다른 문서내에
존재하기 때문에 로컬로 읽을 때 화일이라면 aa 를, 디렉토리라면 aa/index.html
을 가르키게 해야하기 때문입니다. "get /aa" 요청에 다행히 문제가 없이
"200 ok" 가 오면 좋지만 네트웍에라가 나던지 다른 이유로
"302 Moved Temporarily"(이 결과는 디렉토리에 대한 요청을 "get /aa/" 라고
하지 않고 "get /aa" 라고 요청했을 때 보내는 결과값입니다. 물론 실제로
Moved Temporarily 일 수도 있습니다.)도 오지 않고 "200 ok" 도 오지 않으면
http://a.b.c.d/aa 참조테그가 있는 문서는 제대로 로컬의 문서를 가르키지
못하기 때문에 로컬로 읽을 때 불편함이 생깁니다.

이 때문에 scan-url.c 화일에서는 거의 대부분을 이 문제를 해결하기 위한
코드로 채우고 있습니다. 이렇게 쓰지 말자고 "cache 사용 켐페인"이 벌어지고
있습니다. 여러분도 요렇게 문서를 만들지 마시고 참조테그는 명확히




같이 사용하세요. 이런 식으로 네트웍의 부하를 가중시키는데 가장 큰 역활을
하는 곳이 다름아닌 http 프로토콜의 표준을 정하고 있는 www.w3.org 입니다.

여기에서는 w3c_96x67 이라는 w3c 로고 그림화일도 확장자 없이 만들어 놓아서
getwww 가 두번 헤메게하고 있습니다. w3c_96x67은 w3c_96x67.gif 라고 되어야
합니다.

getwww 를 사용할 때 문제가 생기는 부분이 있다면 (SCAN_ERROR 화일에 적히는
내용) 거의 대부분이 여기서 생기는 문제입니다.

11.2 소백에 하는 요청

soback 에서는 gcc 컴파일러를 막아 놓았기 때문에 다른 sunOS 에서

g++ -static

옵션으로 만들어 온 실행화일은 gethostbyname() 호출에 실패합니다.
소백의 gcc 를 열어 주기를 바랍니다. 테스트를 할 수가 없습니다.

11.3 java 받아오기 문제

java 는


등으로 되어 있습니다. 형식이 어떻든 getwww 가 알아서 받아 옵니다.
소스화일이라면 로컬에서 실행이 되겠지만 바이너리라면 로컬에 화일을
받기는 하지만 실행은 되지 않습니다.

banner.class 가 참조하는 클래스가 자체로 제작한 것이라면
banner.class 를 뒤져보면

(Lbanner-subclass;)

같은 글이 있습니다. 클래스라이브러리에서 참조하는 것은

(Ljava/awt/aaa;)

처럼 되어 있습니다.
jdk 에 따라오는 appletview 로 이 클래스를 실행하면 라이브러리에 없는
클래스 명이 나타납니다. 이 것을 받아오려면

getwww http://a.b.c.d/java/banner-subclass.class

하면 됩니다. banner.class 가 참조하는 서브 클래스들을 모두 받아서
적절한 html 문서를 만들고 appletview 로 실행하면 이 클래스가 정상적으로
작동되는데 netscape 에서는 작동이 안됩니다. 왜 그런지는 모릅니다.

banner.class 와 banner-subclass.class를 넷스케입이 참조하는 클래스라이브러리
압축화일에 압축해 넣어도 안됩니다. 이 문제를 어떻게 해결할 수 있을지
도움 줄 수 있는 분은 알려 주세요.

11.4 처리하지 못하는 참조테그들

getwww 가 처리하지 못하는 참조테그가 있을 수 있습니다.
html 문서천체를 총괄적으로 다루지 못하고 라인단위로 처리하기 때문에
그렇습니다. 이 것은 getwww의 한계입니다.


a.b.c.d 에 대한 참조
b.c.d...
....


등과 같은 것입니다. option value 는 여러경우에 쓰이므로 이 버전에서는
select name 이 url 에 대한 참조임을 알아내고 가 나올 때까지의
참조테그를 분석하는등의 처리는 생략했습니다. 라인단위로 처리할 때
option value 가 url 에 대한 select 가 아니라 다른 것일 수도 있기 때문입니다.
차후 버전에서는 html 문서전체를 단위로 처리하도록 하겠습니다.

11.5 imagemap 에 대한 처리

html 문서에 image(그림화일)만 정의되어 있고 image 의 한 부분을 클릭했을 때
참조하는 문서에 대해 명시적으로 적혀 있지 않은 imagemap 에 대한 처리는
할 수 없습니다.

11.6 302 Found 문제
http://www.disney.com 에서는 참조테그를 날짜단위로 만들고

ClickWatch/961129.home1.HOME_nvtxt.imagemap/DisneyInteractive/adventure1

이 화일을 요청하면 302 Found 를 보낸 다음 실제 화일명을

http://www.disney.com/DisneyInteractive/adventure1

에 있다고 알려 옵니다. getwww 는 이 문제를 해결하지 못했습니다.(다 만들고
토이스토리를 볼려고 들어 갔더니 이런 문제가 생기는군요.) getwww는 이 참조
테그를 다른 화일에 적어 버렸기 때문에 변경된 화일을 받아오게 하는 것은
무의미 해서 이에 대한 처리를 하지 않았습니다. 다음 버전에서 참조테그에
적힌 화일명과 실제로 받아오는 문서간의 심볼릭링크를 하면 해결될 것으로
보입니다. "원하는 분이 많이 계시면" 고쳐 보겠습니다.

12. 최신 버전이 있는 곳
ftp.kaist.ac.kr:/incoming/www/ 에 있습니다.
아마 ftp.kaist.ac.kr:/pub/www/ 아래에 들어 갈 수 있을 것입니다.

13. 그외에 할 말

이 프로그램은 snag 라는 프로그램을 써보고 만들게 되었습니다.

snag 라는 프로그램도 getwww 과 같은 일을 하는 프로그램이지만 리커전시
이미 받은 화일에 대한 처리가 미흡하고 cgi 출력에 대한 검색등이 없으며
몇가지 에라가 있어서 뜯어 고치다가 나중에는 누더기가 되는 바람에
처음부터 새로 만들었습니다.

만드는 도중에 webcopy 라는 프로그램이 있는 것을 알게 되어 사용해 보았으나
snag 보다 못하고 참조테그에 대한 로컬처리가 없는 등의 문제가 있어서
사용하지 않았습니다.

사용하면서 문제점이 있거나 개선할 점이 있으면

kisskiss@soback.kornet.nm.kr

로 편지를 해 주시면 감사하겠습니다.

이 프로그램을 만들면서

Mosaic-2.4
lynx-2.6
webcopy
snag-o-rama-1.4
webget

프로그램을 참조 했으며

the gnu c library reference manual
unix socket programming faq
(http://www.auroraonline.com/sock-faq/html/unix-socket-faq.html)
을 참조 했습니다.

이 프로그램은 누구나 자유롭게 사용할 수 있으며
개선한 내용이 있으면 패치화일을
kisskiss@soback.kornet.nm.kr 로 보내주시기 바랍니다.

김인성.

godyang의 이미지

wget -r
옵션을 이용하면 사이트 전체를 긁어오고...

wget -r -l1
옵션을 지정하면, 링크를 1단계까지만 긁어오고...

wget -r --convert-links
옵션을 지정하면, HTML 파일 내의 경로를 알아서 로컬에서 읽을 수 있도록 변환시켜주죠.

단점은 wget 으로 긁을때 일부 파일들이 누락되는 문제가 있습니다.
(css에서 지정된 파일 등등)

자일자일의 이미지

man wget 해봤다가 깜짝놀랐습니다.
1500줄..! 옵션이 상당히 많이 있네요.
wget으로 페이지 로딩 측정하는것도 편리하게 이용할 수 있는 좋은 방법인듯하네요.
단...웹브라우저에서 자바스크립트 처리하는 시간등이 무시되는것이 좀 아쉽긴 한데
제가 할 수 있는 가장 최선의 방법은 wget을 이용하는것이 맞는것 같네요^^감사합니다.

권순선의 이미지

http://code.google.com/speed/page-speed/ 도 참고해 보세요...

자일자일의 이미지

좋은 프로그램인듯 하지만...

정해진 시간마다 자동으로 웹페이지 로딩 속도를 체크하여 결과를 보여주는 기능을 하지고 있지는 않은것 같네요.
알아본 바로는... 로컬에서(내 PC)에서 이런 방식으로 체크할 수 있는 툴로는 널리 알려진게 없는것 같습니다.

주로 이런 서비스는 리모트(특정 서비스 업체)에서 신청을 받아 체크해주는것 같습니다.

VMWare 등의 가상 PC에 간단한 매크로(오토핫키등..)프로그램으 + 스크린샷 기능으로 처리하는 방법밖에
떠오르지 않네요.

감사합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.