임의의 사이트에서 웹 문서를 수집하려고 합니다. (소켓 프로그래밍, HTTP GET 명령 이용, Unix, C)
소켓 프로그래밍을 수행해서(Unix, C 언어 이용) 임의의 사이트로 GET 메세지를 보내서 해당 사이트의 웹 문서를 수집해 오는 프로그램을 만들려고 하는데, GET 명령어 사용법과 관련해 질문 있습니다.
-----------------------------------------------------------------------------------
(1) HTTP GET 명령 사용법 알려주세요
다음이 제가 알고 있는 방법인데.. 너무 엉성한 것 같아서..
( www.hani.co.kr 의 메인 화면의 html 문서를 가져올 경우)
- Unix shell prompt 상에 다음의 명령어 입력
prompt> telnet www.hani.co.kr 80
- telnet 접속후 다음의 명령어 입력
GET /
- 위와 같이 입력하면 www.hani.co.kr 의 메인 화면에 해당하는 html 소스가 화면에 출력된 후 다음의 메세지 출력후 종료됨 (shell prompt 가 다시 뜹니다.)
Connection to www.hani.co.kr closed by foreign host.
telnet 을 이용하는 거 맞나요?
또 왜 종료가 될까요? 뭐 잘못한 건가요?
(2) HTTP GET 을 이용해 파일을 가져올 때, '/' 말고 링크로 연결된 웹 페이지들의 내용도 읽어 오려고 하는데.. 방법을 모르겠습니다. http://wnetwork.hani.co.kr/gategateparagate/1834 와 같은 링크가 '/' 의 html 소스에 걸려 있는데.. 이 링크의 html 문서를 가져오려면 GET 명령어를 어떻게 써야 하죠?
GET http://wnetwork.hani.co.kr/gategateparagate/1834
위와 같이 입력해 봤었는데.. 수행 결과, 해당 문서가 화면에 뜨지 않았습니다.
도와 주세요... (2)번은 정말 감이 안 오는 문제입니다....
---------------------------------------------------------
웹 문서를 수집하고자 하는 사이트에 보낼 메세지의 내용은 결국 'GET ~~~' 가 되는 거겠죠? ^^;;
너무 초보적인 질문일지도 모르겠다는 생각이 드네요...하핫^^
GET /gategateparagate/1834
GET /gategateparagate/1834 HTTP/1.1
HOST: http://wnetwork.hani.co.kr
======================
BLOG : http://superkkt.com
======================
BLOG : http://superkkt.com
물론 실제 connect를
물론 실제 connect를 wnetwork.hani.co.kr의 80포트에 해야합니다.
RFC 문서의 http 에
RFC 문서의 http 에 관한 것을 읽고 이해가 안가셔서 그런거라면
실제 브라우져의 패킷을 잡아서 내용을 보는 것도 하나의 방법이 될 듯 하군요.
제가 아는 범위에서 ^^
문법 )
GET path HTTP/1.0 \r\n
Host: host명 \r\n
\r\n
--------------------------------------
만일 www.kldp.org/nnnn/10000
이라면
GET /nnnn/10000 HTTP/1.0 엔터)
Host www.kldp.org (엔터)/(엔터)
치시면 됩니다.
HTTP/1.0 은 기본값으로서 ... 이값이 지정되면 웹서버에서 문서를 보내준후 연결을 끊어 버립니다.
HTTP/1.1 로 하시면 연결 지향인데... 약간 파싱하셔야 할 내용이 좀 있습니다.
가자 해외로 ~ .. 돈 벌러.
1) 연결을 하고 나서
1) 연결을 하고 나서 끊어지는 이유
HTTP 헤더중에 connection이라는 헤더가 있는데 이 헤더의 값이 close로 되어 있습니다. 이 때문에 페이지 내용이 전송되고 나서 바로 연결이 끊어지는 것입니다.
2) 서버주소가 다른 경우엔 새로 연결을 해야 합니다.
www.hani.co.kr하고 wnetwork.hani.co.kr이 설사 같은 서버(IP동일)라고 해도 따로 접속하는 것이 간단합니다.
예시로 든 두 주소의 내용을 가져오는 telnet명령은 아래와 같습니다.
한 걸음 더 가까이
답변 감사합니다.^^
바쁘실텐데.. 답글 달아주셔서 다들 너무 감사합니다..^^
댓글 달기