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 버전을 요구하는 경우 여기에서 선택할 수 있습니다.
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를 사용하여 인증할 수 있습니다.
기본적으로 HTTP1Client는 차단 요청을 사용하므로, HTTP 요청 메서드를 호출한 후 클라이언트는 서버로부터의 응답을 기다립니다. 또는 비동기 메서드를 사용하여 이러한 HTTP 요청을 보조 스레드에서 실행하여 요청이 호출되는 스레드의 차단을 방지할 수 있습니다. 다음 비동기 메서드가 구현되어 있습니다:
이 메서드를 호출한 후, 응답을 기다리는 대신 코드는 다음 줄로 계속 진행되며, 응답은 OnAsyncResponse 이벤트를 사용하여 처리할 수 있습니다.
procedure OnAsyncResultEvent(Sender: TObject; const aRequest:
TsgcHTTPAsyncRequest; const aResponse: TIdHTTPResponse);
비동기 요청을 처리하는 동안 오류가 있으면, OnAsyncException 이벤트에서 예외가 발생합니다.
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 요청을 처리하는 동안 오류가 발생하면, 발생한 예외와 함께 이 이벤트가 호출됩니다.