HTTP/1

TsgcHTTP1Client は TIdHTTP Indy コンポーネントを継承し、いくつかの新しいプロパティを追加した非ビジュアルコンポーネントです。

このコンポーネントはsgcHTTPユニットにあります。

TLSOptions

HTTP/1 プロトコルを使用してセキュアな SSL/TLS サーバーに接続する方法を設定できます。

 

ALPNProtocols: サーバーに送信されるALPNプロトコルのリスト。

RootCertFile: ルート証明書ファイルへのパス。

CertFile: 証明書ファイルへのパス。

KeyFile: 証明書鍵ファイルへのパス。

Password: 証明書がパスワードで保護されている場合は、ここに設定します。

VerifyCertificate: 証明書を検証する場合はこのプロパティを有効にします。SSL 検証のカスタマイズには OnSSLVerifyPeer イベントを使用します。

VerifyDepth: X.509 証明書の検証実行時に許可されるリンクの最大数を表す整数プロパティ。

Version: デフォルトでは TLS 1.0 を使用します。サーバーがより高いTLSバージョンを要求する場合は、ここで選択できます。

プロキシ: プロキシサーバーを経由して接続するかどうかを定義できます。以下のプロキシサーバーに接続できます。

pxyHTTP: HTTPプロキシサーバー。

pxySocks4: SOCKS4 プロキシサーバー。

pxySocks4A: SOCKS4A プロキシサーバー。

pxySocks5: SOCKS5 プロキシサーバー。

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 パーソナリティに対して、ライブラリが格納されるべき OpenSSL パスを自動的に設定します。

oslpCustomFolder: このオプションが選択されている場合、プロパティ LibPathCustom にフルパスを定義します。

LibPathCustom: LibPath = oslpCustomFolder の場合、ここに OpenSSL ライブラリのフルパスを定義します。

UnixSymLinks: Unix システムでシンボリックリンクの読み込みを有効または無効にします(デフォルトでは有効です。OSX64 は除きます)。

oslsSymLinksDefault: デフォルトでは、OSX64 以外でシンボリックリンクが有効です(macOS Monterey 以降では、バージョンなしでライブラリをロードしようとすると失敗します)。

oslsSymLinksLoadFirst: バージョン管理されたライブラリを読み込む前に、まずシンボリックリンクを読み込みます。

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: リクエストと異なる場合はホスト名を設定します。

IPAddress: リクエストと異なる場合は IP アドレスを設定します。

 

SChannel_Options: Windows 証明書ストアから証明書を使用できます。

CertHash: 証明書のハッシュ値です。PowerShell で dir コマンドを実行することで証明書のハッシュ値を確認できます。

CipherList: 使用する暗号スイートを(":" で区切って)設定できます。例: CALG_AES_256:CALG_AES_128

CertStoreName: 証明書が保存されているストア名。以下のいずれかを選択してください。

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

 

イベント

OnSSEMessage

 

新しいSSEメッセージを受信したときにイベントが呼び出されます。

 

OnSSLVerifyPeer

 

証明書の検証が有効な場合、このイベントでサーバー証明書を検証して受け入れるかどうかを決定できます。

 

OnSSLGetHandler

 

このイベントは SSL ハンドラーが作成される前に発生します。ここで独自の SSL ハンドラーを作成し(TIdServerIOHandlerSSLBase または TIdIOHandlerSSLBase を継承する必要があります)、必要なプロパティを設定できます。

 

OnSSLAfterCreateHandler

 

カスタムSSLオブジェクトが作成されていない場合、OpenSSLハンドラーを使用してデフォルトのオブジェクトが作成されます。SSLハンドラーのプロパティにアクセスして、必要に応じて変更できます。

 

OnAsyncResult

 

このイベントは、Asyncメソッド(GetAsync、PutAsyncなどのメソッドを使用)を要求した後に呼び出されます。Responseパラメータを使用して、要求の結果を確認してください。

 

OnAsyncException

 

非同期リクエストの処理中にエラーが発生した場合、このイベントは発生した例外とともに呼び出されます。