C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[22708] Re:[j빌더]님 다시 질문이에요..
Julien [julien] 945 읽음    2002-11-19 09:58
빌더입문 님이 쓰신 글 :
: 앞의 친절한 설명 정말 감사히 잘보았습니다..근데 제가 아직 학문의 입문 수준이 짧아서요.
:
: 이것 자세하게좀 설명해 주셨으면해서요..
:
: String str = IdHTTP1->Get("http://WEB_SERVER/FILE");
:
: http1->get() 이것의 정의가 먼지..^^
TIdHTTP 는 Indy컴포넌트를 설치하면 그 안에 들어있습니다.
이름에서 알 수 있듯이 HTTP프로토콜을 구현한 클래스입니다.

HTTP커넥션에서 클라이언트의 request는 시작부 + 헤더부 + 바디부의 세 부분으로 구성됩니다.

시작부분   [HTTP명령][URI][HTTP버전번호]
헤더부분   [클라이언트 자체의 정보][서버로 보내는 데이터에 대한 정보]
바디부분   [서버로 보내는 데이터]

여기서 HTTP명령어는 서버에게 어떤 행동을 할 지를 지정하는 것입니다.
주로 많이 쓰이는 것은 GET, HEAD, POST이고 그 외에 OPTIONS, PUT, DELETE, LINK, UNLINK, TRACE같은 명령도 있습니다.

Get명령은 입력데이터를 URI에 붙여서 전송하므로 메시지 바디를 사용하지 않습니다.
이 경우 입력값은 환경변수 QUERY_STRING을 통해 전달되고 주소줄에 그 내용이 보이게 됩니다.
일반적으로 홈페이지를 로드할 때 입력값없이 호출하는데 사용되고 게시판에도 많이 쓰이죠.
여기 볼랜드포럼 게시판 같은 경우는 입력값을 가진 형태의 GET명령이 사용되고 있죠.

Head명령은 서버에게 HEADER정보만 요청하는 것입니다. 바디가 비어있는 것 외에는 Get과 동일합니다. 주로 웹서버의 종류, 버전같은 서버에 대한 정보만 읽어내는 데 사용하죠.

Post명령은 입력데이터를 인코딩한 후 바디부분에 넣어서 스트림으로 전송합니다.
게시판에 파일을 업로드하거나 로그인정보처럼 보안이 필요한 곳에 사용하게 됩니다. 이 때 입력데이터의 길이를 환경변수 CONTENT_LENGTH에 저장합니다.

나머지는 직접 찾아보시기 바랍니다. ^^

일반적으로 HTML코딩때 Form 태그의 METHOD옵션에서 Get과 Post를 많이 사용하였을 것입니다.
이것이 웹브라우저가 웹서버와 어떤 형태로 통신을 할 지를 지정해 주는 것입니다.
단순하게 생각해보면 ...
Get이든 Post든 웹서버에 정보(입력값이 있든 없든)를 넘겨주고 웹서버가 리턴한 값(웹페이지)를 받아오는 것입니다.

String str = IdHTTP1->Get("http://WEB_SERVER/FILE");

이 명령을 사용하면 HTTP프로토콜에 정의된 명령중 GET을 이용하여 WEB_SERVER에게 FILE의 내용을 리턴하라는 의미가 됩니다. 그럼 웹서버는 FILE이 웹서버 설정에서 전처리를 하도록 설정된 CGI이거나 기타의 스크립트이거나 하면 실행후 결과를, 그 외의 다른파일(일반 HTML파일이거나 텍스트파일이거나 이미지파일)이면 내용을 읽어서 웹브라우저로 전송하게 되는 것이죠.
리턴되는 것이 문자열이라는 가정하에 그 결과를 [Ansi]String타입으로 받은 것입니다.
Memo1->Lines->Add(IdHTTP1->Get("http://www.borlandforum.com");
해 보시면 볼랜드포럼 메인페이지의 HTML소스를 보실 수 있을 것입니다.
만일 리턴되는 값이 바이너리라면 메모리에 스트림을 하나 만들어서 그리로 받는 것이 좋을 것입니다.

:
: char* p = strtok(str.c_str(), " "); 
:
: p = strtok(NULL, " ");
: ShowMessage(String(p));
:
:
:
: 그리고 엔터 키값이 머져?? 엔터 저절로 눌러주는거..^^
엔터의 키값은 13입니다. VK_RETURN으로 써도 되고 '\n'으로 써도 됩니다.
:
: 부탁..

+ -

관련 글 리스트
22705 [j빌더]님 다시 질문이에요.. 빌더입문 552 2002/11/18
22708     Re:[j빌더]님 다시 질문이에요.. Julien 945 2002/11/19
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.