임의의 사이트에서 웹 문서를 수집하려고 합니다. (소켓 프로그래밍, HTTP GET 명령 이용, Unix, C)

cabjaewon의 이미지

소켓 프로그래밍을 수행해서(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 ~~~' 가 되는 거겠죠? ^^;;

너무 초보적인 질문일지도 모르겠다는 생각이 드네요...하핫^^

superkkt의 이미지

GET /gategateparagate/1834 HTTP/1.1
HOST: http://wnetwork.hani.co.kr

======================
BLOG : http://superkkt.com

======================
BLOG : http://superkkt.com

kewlbear의 이미지

물론 실제 connect를 wnetwork.hani.co.kr의 80포트에 해야합니다.

ssehoony의 이미지

RFC 문서의 http 에 관한 것을 읽고 이해가 안가셔서 그런거라면
실제 브라우져의 패킷을 잡아서 내용을 보는 것도 하나의 방법이 될 듯 하군요.

kicom95의 이미지


문법 )

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) 연결을 하고 나서 끊어지는 이유
HTTP 헤더중에 connection이라는 헤더가 있는데 이 헤더의 값이 close로 되어 있습니다. 이 때문에 페이지 내용이 전송되고 나서 바로 연결이 끊어지는 것입니다.
2) 서버주소가 다른 경우엔 새로 연결을 해야 합니다.
www.hani.co.kr하고 wnetwork.hani.co.kr이 설사 같은 서버(IP동일)라고 해도 따로 접속하는 것이 간단합니다.

예시로 든 두 주소의 내용을 가져오는 telnet명령은 아래와 같습니다.

Quote:

prompt> telnet www.hani.co.kr 80
GET / HTTP/1.1
Host: www.hani.co.kr(엔터 두번)

(내용 전송)
(연결 끊김)
prompt> telnet wnetwork.hani.co.kr 80
GET /gategateparagate/1834 HTTP/1.1
Host: wnetwork.hani.co.kr(엔터 두번)

(내용 전송)
(연결 끊김)

한 걸음 더 가까이

cabjaewon의 이미지

바쁘실텐데.. 답글 달아주셔서 다들 너무 감사합니다..^^

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.