HTTP/1

TsgcHTTP1Client는 TIdHTTP indy 구성 요소에서 상속되고 일부 새 속성을 추가하는 비주얼이 아닌 구성 요소입니다.

이 구성 요소는 sgcHTTP 유닛에 있습니다.

TLSOptions

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

Log 속성이 활성화되면 소켓 메시지를 지정된 로그 파일에 저장하므로 디버깅에 유용합니다.

 

LogOptions.FileName: 파일 이름의 전체 경로입니다.

 

Authentication

OAuth2 또는 JWT를 사용하여 인증할 수 있습니다.

 

 

Asynchronous Requests

기본적으로 HTTP1Client는 차단 요청을 사용하므로, HTTP 요청 메서드를 호출한 후 클라이언트는 서버로부터의 응답을 기다립니다. 또는 비동기 메서드를 사용하여 이러한 HTTP 요청을 보조 스레드에서 실행하여 요청이 호출되는 스레드의 차단을 방지할 수 있습니다. 다음 비동기 메서드가 구현되어 있습니다:

 

 

이 메서드를 호출한 후, 응답을 기다리는 대신 코드는 다음 줄로 계속 진행되며, 응답은 OnAsyncResponse 이벤트를 사용하여 처리할 수 있습니다.

 


procedure OnAsyncResultEvent(Sender: TObject; const aRequest:
    TsgcHTTPAsyncRequest; const aResponse: TIdHTTPResponse);

비동기 요청을 처리하는 동안 오류가 있으면, OnAsyncException 이벤트에서 예외가 발생합니다.

 

Examples

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.1TLS 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;

 

Events

OnSSEMessage

 

이 이벤트는 새 SSE 메시지가 수신될 때 호출됩니다.

 

OnSSLVerifyPeer

 

verify certificate가 활성화된 경우, 이 이벤트에서 서버 인증서를 확인하고 수락할지 여부를 결정할 수 있습니다.

 

OnSSLGetHandler

 

이 이벤트는 SSL 핸들러가 생성되기 전에 발생합니다. 여기에서 자체 SSL 핸들러를 생성하고(TIdServerIOHandlerSSLBase 또는 TIdIOHandlerSSLBase에서 상속되어야 함) 필요한 속성을 설정할 수 있습니다.

 

OnSSLAfterCreateHandler

 

사용자 정의 SSL 객체가 생성되지 않은 경우, OpenSSL 핸들러를 사용하여 기본 객체가 생성됩니다. SSL 핸들러 속성에 액세스하여 필요한 경우 수정할 수 있습니다.

 

OnAsyncResult

 

이 이벤트는 비동기 메서드(GetAsync, PutAsync... 메서드 사용)를 요청한 후 호출됩니다. 요청 결과를 알기 위해 Response 매개변수를 사용하십시오.

 

OnAsyncException

 

async 요청을 처리하는 동안 오류가 발생하면, 발생한 예외와 함께 이 이벤트가 호출됩니다.