TsgcHTTP1Client는 TIdHTTP indy 구성 요소에서 상속되고 일부 새 속성을 추가하는 비주얼이 아닌 구성 요소입니다.
이 구성 요소는 sgcHTTP 유닛에 있습니다.
HTTP/1 프로토콜을 사용하여 보안 SSL/TLS 서버에 연결하는 방법을 구성할 수 있도록 합니다.
ALPNProtocols: 서버로 전송될 ALPN 프로토콜 목록입니다.
RootCertFile: 루트 인증서 파일의 경로입니다.
CertFile: 인증서 파일 경로입니다.
KeyFile: 인증서 키 파일의 경로입니다.
Password: 인증서가 비밀번호로 보호되어 있는 경우 여기에 설정하십시오.
VerifyCertificate: 인증서를 검증해야 하는 경우 이 속성을 활성화하십시오. SSL 검증을 사용자 지정하려면 OnSSLVerifyPeer 이벤트를 사용하십시오.
VerifyDepth: X.509 인증서에 대해 검증이 수행될 때 허용되는 최대 링크 수를 나타내는 Integer 속성입니다.
Version: 기본적으로 TLS 1.0을 사용합니다. 서버가 더 높은 TLS 버전을 요구하는 경우 여기에서 선택할 수 있습니다.
Preset: 한 번의 할당으로 일련의 보안 기본값을 적용합니다. tlspCustom(기본값)이면 모든 옵션이 수동으로 구성한 값을 유지합니다. tlspSecureDefaults를 설정하면 VerifyCertificate가 활성화되고, (더 낮거나 정의되지 않은 버전이 구성된 경우) Version이 최소 TLS 1.2로 올라가며, 서버 인증서의 호스트 이름 검증이 활성화됩니다.
Proxy: 여기에서 Proxy Server를 통해 연결할지 여부를 정의할 수 있습니다. 다음 프록시 서버에 연결할 수 있습니다:
pxyHTTP: HTTP Proxy Server.
pxySocks4: SOCKS4 Proxy Server.
pxySocks4A: SOCKS4A 프록시 서버.
pxySocks5: SOCKS5 Proxy Server.
IOHandler: TLS를 사용하여 연결할 때 사용할 라이브러리를 선택합니다.
iohOpenSSL: OpenSSL 라이브러리를 사용하며 Indy 구성 요소의 기본값입니다. win32/win64용 OpenSSL 라이브러리 배포가 필요합니다.
iohSChannel: Microsoft가 Windows용으로 구현한 보안 프로토콜인 Secure Channel을 사용합니다. OpenSSL 라이브러리를 배포할 필요가 없습니다. Windows 32/64비트에서만 작동합니다.
OpenSSL_Options: openSSL 라이브러리의 구성입니다.
APIVersion: 어떤 OpenSSL API를 사용할지 정의할 수 있게 합니다.
oslAPI_1_0: API 1.0 OpenSSL을 사용하며, Indy가 지원하는 최신 버전입니다
oslAPI_1_1: API 1.1 OpenSSL을 사용하며, 당사의 사용자 정의 Indy 라이브러리가 필요하고 OpenSSL 1.1.1 라이브러리(TLS 1.3 지원 포함)를 사용할 수 있게 합니다.
oslAPI_3_0: API 3.0 OpenSSL을 사용하며, 사용자 지정 Indy 라이브러리가 필요하고 OpenSSL 3.0.0 라이브러리(TLS 1.3 지원 포함)를 사용할 수 있습니다.
LibPath: 여기에서 OpenSSL 라이브러리가 위치한 곳을 구성할 수 있습니다
oslpNone: 이것은 기본값입니다. OpenSSL 라이브러리는 바이너리와 동일한 폴더 또는 알려진 경로에 있어야 합니다.
oslpDefaultFolder: 모든 IDE personality에 대해 라이브러리가 위치해야 하는 OpenSSL 경로를 자동으로 설정합니다.
oslpCustomFolder: 이 옵션이 선택된 경우, LibPathCustom 속성에 전체 경로를 정의하십시오.
LibPathCustom: LibPath = oslpCustomFolder인 경우 OpenSSL 라이브러리가 위치한 전체 경로를 여기에 정의하십시오.
UnixSymLinks: Unix 시스템에서 SymLinks 로딩을 활성화하거나 비활성화합니다(기본적으로 활성화되어 있으며, OSX64에서는 예외):
oslsSymLinksDefault: 기본적으로 symlink는 OSX64를 제외하고 활성화됩니다(macOS Monterey 이상은 버전 없이 라이브러리를 로드하려고 할 때 실패합니다).
oslsSymLinksLoadFirst: 버전이 지정된 라이브러리를 로드하기 전에 symlink를 먼저 로드합니다.
oslsSymLinksLoad: 버전이 지정된 라이브러리를 로드하려고 시도한 후 심볼릭 링크를 로드합니다.
oslsSymLinksDontLoad: SymLinks를 로드하지 않습니다.
MinVersion: 보안 서버에 연결하기 위해 클라이언트가 사용할 최소 버전을 여기에 설정하십시오. 기본적으로 값은 tlsUndefined이며, 이는 최소 버전이 Version 속성에 설정된 것과 동일함을 의미합니다. 예: 클라이언트가 TLS 1.2 또는 TLS 1.3만 사용하여 연결하도록 설정하려면 다음 값을 설정하십시오.
SSLOptions.Version := tls1_3;
SSLOptions.OpenSSL_Options.MinVersion := tls1_2;
X509Checks: 추가 X509 인증서 유효성 검사를 활성화하려면 이 속성을 사용하십시오:
Mode: 어떤 옵션을 검증할지 선택합니다
oslx509chHostName: 호스트명 인증서를 검증합니다.
oslx509chIPAddress: 인증서의 ip 주소를 검증합니다.
HostName: 요청과 다른 경우 hostname을 설정합니다.
IPAddress: 요청과 다른 경우 ip 주소를 설정하십시오.
SChannel_Options: Windows Certificate Store의 인증서를 사용할 수 있게 합니다.
CertHash: 는 인증서 Hash입니다. powershell에서 dir 명령을 실행하여 인증서 Hash를 찾을 수 있습니다.
CipherList: 여기에서 어떤 Cipher가 사용될지 설정할 수 있습니다(":"로 구분). 예: CALG_AES_256:CALG_AES_128
CertStoreName: 인증서가 저장되는 store 이름. 다음 중 하나를 선택하십시오:
scsnMY(기본값)
scsnCA
scsnRoot
scsnTrust
CertStorePath: 인증서가 저장된 저장소 경로입니다. 다음 중 하나를 선택하십시오:
scspStoreCurrentUser (기본값)
scspStoreLocalMachine
Log 속성이 활성화되면 소켓 메시지를 지정된 로그 파일에 저장하므로 디버깅에 유용합니다.
LogOptions.FileName: 파일 이름의 전체 경로입니다.
OAuth2 또는 JWT를 사용하여 인증할 수 있습니다.
선택적 지터가 있는 지수 백오프를 사용하여 실패한 HTTP 요청을 자동으로 재시도합니다. 재시도는 기본적으로 비활성화되어 있으므로 Enabled를 true로 설정하지 않는 한 동작은 변하지 않습니다. 응답 상태 코드가 StatusCodes에 포함되거나 일시적인 네트워크 오류(연결 종료, 소켓 오류, 연결 또는 읽기 타임아웃)가 발생하면 요청이 재시도됩니다.
Enabled: 실패한 요청의 자동 재시도를 활성화합니다. 기본값은 false입니다.
MaxRetries: 최초 요청 이후의 최대 재시도 횟수입니다. 기본값은 3입니다.
InitialInterval: 첫 번째 재시도 전의 지연 시간(밀리초)입니다. 기본값은 500입니다.
MaxInterval: 재시도 사이의 최대 지연 시간(밀리초)입니다. 기본값은 30000입니다.
Multiplier: 매 시도 후 지연 시간에 적용되는 계수입니다. 기본값은 2.0으로, 재시도할 때마다 지연 시간이 두 배가 됩니다: 500, 1000, 2000...
Jitter: 모든 지연 시간에 적용되는 0과 1 사이의 무작위 계수입니다(0.2는 각 지연 시간을 최대 20%까지 변동시킵니다). 많은 클라이언트가 정확히 같은 시각에 재시도하는 것을 방지합니다. 기본값은 0.2입니다.
HonorRetryAfter: 서버가 Retry-After 헤더(초 또는 HTTP 날짜 형식, 보통 429 또는 503 응답과 함께)로 응답하면 클라이언트는 계산된 백오프 지연 대신 서버가 요청한 시간만큼 기다립니다. 기본값은 true입니다.
StatusCodes: 재시도를 트리거하는 HTTP 상태 코드의 쉼표로 구분된 목록입니다. 기본값은 "429,502,503,504"입니다.
예: 시도 간격 1초부터 시작하여 최대 5회 재시도합니다.
oHTTP := TsgcHTTP1Client.Create(nil);
oHTTP.RetryOptions.Enabled := True;
oHTTP.RetryOptions.MaxRetries := 5;
oHTTP.RetryOptions.InitialInterval := 1000;
ShowMessage(oHTTP.Get('https://www.esegece.com'));
AI 공급자 클라이언트(OpenAI, Anthropic, Gemini 및 기타 LLM API 클라이언트)는 해당 Options의 RetryOptions 속성을 통해 이와 동일한 재시도 엔진을 사용합니다.
기본적으로 HTTP1Client는 차단 요청을 사용하므로, HTTP 요청 메서드를 호출한 후 클라이언트는 서버로부터의 응답을 기다립니다. 또는 비동기 메서드를 사용하여 이러한 HTTP 요청을 보조 스레드에서 실행하여 요청이 호출되는 스레드의 차단을 방지할 수 있습니다. 다음 비동기 메서드가 구현되어 있습니다:
이 메서드를 호출한 후, 응답을 기다리는 대신 코드는 다음 줄로 계속 진행되며, 응답은 OnAsyncResponse 이벤트를 사용하여 처리할 수 있습니다.
procedure OnAsyncResultEvent(Sender: TObject; const aRequest:
TsgcHTTPAsyncRequest; const aResponse: TIdHTTPResponse);
비동기 요청을 처리하는 동안 오류가 있으면, OnAsyncException 이벤트에서 예외가 발생합니다.
Delphi 2010 이상에서는 클라이언트가 이벤트 핸들러가 전혀 필요 없는 퓨처(future) 방식 비동기 요청도 구현합니다:
function GetFuture(const AURL: string): IsgcFuture<string>;
function PostFuture(const AURL: string; aData: TStream): IsgcFuture<string>;
요청은 백그라운드 스레드에서 실행되며 반환된 퓨처는 응답 본문으로 확정(resolve)됩니다. 응답이 도착할 때까지 차단하려면 Await를, 컨티뉴에이션에서 응답을 사용하려면 ThenProc을, 오류를 처리하려면 OnError를 호출하십시오. Cancel을 호출하면 내부 HTTP 요청이 끝까지 실행되지 않고 중단됩니다.
oHTTP := TsgcHTTP1Client.Create(nil);
oHTTP.GetFuture('https://www.esegece.com')
.ThenProc(procedure(const aBody: string)
begin
Log(aBody);
end)
.OnError(procedure(E: Exception)
begin
Log(E.Message);
end);
HTTPs 서버에 GET 메서드를 요청하고 TLS 1.2를 사용합니다
oHTTP := TsgcHTTP1Client.Create(nil);
Try
oHTTP.TLSOptions.Version := tls1_2;
ShowMessage(oHTTP.Get('https://www.google.es'));
Finally
oHTTP.Free;
End;
openSSL 1.1 및 TLS 1.3을 사용하여 HTTPs 서버에 GET 메서드를 요청합니다.
oHTTP := TsgcHTTP1Client.Create(nil);
Try
oHTTP.TLSOptions.OpenSSL_Options.APIVersion := oslAPI_1_1;
oHTTP.TLSOptions.Version := tls1_3;
ShowMessage(oHTTP.Get('https://www.google.es'));
Finally
oHTTP.Free;
End;
비동기 POST 메서드를 요청하고 OnAsyncResultEvent를 사용하여 응답을 읽습니다.
procedure OnAsyncExceptionEvent(Sender: TObject; const aThread:
TsgcThread; const E: Exception);
begin
Log(E.Message);
end;
procedure OnAsyncResultEvent(Sender: TObject; const aRequest:
TsgcHTTPAsyncRequest; const aResponse: TIdHTTPResponse);
begin
if aResponse.ResponseCode = 200 then
Log('ok', aRequest.Response)
else
Log('error', aRequest.Response);
end;
oHTTP := TsgcHTTP1Client.Create(nil);
oHTTP.OnAsyncResult := OnAsyncResultEvent;
oHTTP.OnAsyncException := OnAsyncResultEvent;
oRequest := TStringStream.Create('body');
oResponse := TStringStream.Create('');
oHTTP.PostAsync('https://localhost/test', oRequest, oResponse);
Windows용 SChannel을 사용하여 HTTPs 서버에 GET 메서드를 요청합니다.
oHTTP := TsgcHTTP1Client.Create(nil);
Try
oHTTP.TLSOptions.IOHandler := iohSChannel;
oHTTP.TLSOptions.Version := tls1_2;
ShowMessage(oHTTP.Get('https://www.google.es'));
Finally
oHTTP.Free;
End;
데이터 이벤트를 얻으려면 SSE 메서드를 요청하십시오
oHTTP := TsgcHTTP1Client.Create(nil);
oHTTP.OnSSEMessage := OnSSEMessageEvent;
oHTTP.GetSSE('https://www.yoursite.com/sse');
procedure OnSSEMessageEvent(Sender: TObject; const aMessage: string; var Cancel: Boolean);
begin
ShowMessage(aMessage);
end;
OnSSEMessage
이 이벤트는 새 SSE 메시지가 수신될 때 호출됩니다.
OnSSLVerifyPeer
verify certificate가 활성화된 경우, 이 이벤트에서 서버 인증서를 확인하고 수락할지 여부를 결정할 수 있습니다.
OnSSLGetHandler
이 이벤트는 SSL 핸들러가 생성되기 전에 발생합니다. 여기에서 자체 SSL 핸들러를 생성하고(TIdServerIOHandlerSSLBase 또는 TIdIOHandlerSSLBase에서 상속되어야 함) 필요한 속성을 설정할 수 있습니다.
OnSSLAfterCreateHandler
사용자 정의 SSL 객체가 생성되지 않은 경우, OpenSSL 핸들러를 사용하여 기본 객체가 생성됩니다. SSL 핸들러 속성에 액세스하여 필요한 경우 수정할 수 있습니다.
OnAsyncResult
이 이벤트는 비동기 메서드(GetAsync, PutAsync... 메서드 사용)를 요청한 후 호출됩니다. 요청 결과를 알기 위해 Response 매개변수를 사용하십시오.
OnAsyncException
async 요청을 처리하는 동안 오류가 발생하면, 발생한 예외와 함께 이 이벤트가 호출됩니다.