1. 개요
TIdHTTPServer를 이용한 간단한 웹서버 작성시 클라이언트 요청에 대한 응답(Response) 메시지 작성시 헤더에 처리 결과 값을 노출 핟다던가, 특정한 메시지를 전달하고자 하는 경우 헤더를 조작해야 하는 경우가 있다. TIdHTTPServer에서 헤더를 다루는 방법을 알아본다.
2. TIdHTTPServer 응답 헤더 다루기
TIdHTTPServer는 ServerCommandGet 이벤트에서 클라이언트에서 요청한 내용을 처리 하도록 하는데 이때 요청메시지인 TIdContext 를 받아서 처리하는 핸들러를 작성하여 처리한다.
응답 헤더를 다루기 위해서는 IdContext의 HandleRequest 핸들러에서 "AResponseInfo.CustomHeaders" 를 이용하여 조작할 수 있다.
// ServerCommandGet 이벤트 핸들러
procedure TdmServer.ServerCommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
LClientContext : TClientContext;
begin
LClientContext := TClientContext(AContext);
LClientContext.HelloMessage := frmMain.mmMessage.Text;
LClientContext.LogStrings := frmMain.mmLogs.Lines;
LClientContext.HandleRequest(ARequestInfo, AResponseInfo);
end;
// 처리 핸들러 유닛
interface
type
...
TEchoStringClientContext = class(TIdServerContext)
private
FLogStrings : TStrings;
procedure Log(const s:String);
public
property LogStrings : TStrings read FLogStrings write FLogStrings;
procedure HandleRequest(ARequestInfo : TIdHTTPRequestInfo; AResponseInfo : TIdHTTPResponseInfo);
end;
implementation
procedure TClientContext.HandleRequest(ARequestInfo: TIdHTTPRequestInfo;
AResponseInfo: TIdHTTPResponseInfo);
begin
try
//URLEncode 되어 들어온 Request정보를 Decoding한다.
MyDecodeAndSetParams(ARequestInfo);
AResponseInfo.ContentText := format('%s', [ FHelloMessage]);
AResponseInfo.ContentType := 'text/html';
AResponseInfo.CharSet := 'UTF-8';
// 헤더를 조작한다
AResponseInfo.CustomHeaders.AddValue('EF Code', '200'); // 헤더에 "EF Code=200" 이 기록된다.
except
on e:Exception do
Log('Exception occured form IP : ' + Connection.Socket.Binding.PeerIP + #13#10 + E.Message);
end;
end;
반응형
'IT > 델파이' 카테고리의 다른 글
TRichEdit에서 기본 컨텍스트팝업메뉴(Context Popup Menu) 활성화 시키기 (0) | 2023.02.15 |
---|---|
TMonthCalendar의 특정날짜 마크하기 (0) | 2023.02.15 |
문자열에서 Null문자 제거하기 (0) | 2023.02.15 |
델파이 TWebBrowser 컴포넌트에서 자바스크립트 직접 실행하는 방법 (0) | 2023.02.15 |
이미지 파일명을 가지고 이미지 사이즈(폭/높이) 알아내기 (0) | 2023.02.14 |