HTTPクライアントの最新改良点

Deeplからの自動翻訳

4D v19R6で、HTTPリクエストを実行する新しい方法をお届けしました。HTTPクラスです。当時、HTTP クラスの機能のいくつかは、新しいシンタックスに適応させるために、最終的なものではありませんでした。それは今、完了しました!v19R7では、圧縮応答、チャンク応答、リダイレクションの機能が完成しています。

ボーナスとして、HTTPリクエストのログを取る新しい方法も追加されました。そして、みんなに役立つように、この新しいログはレガシー構文だけでなく、新しいHTTPクラスでも利用可能です。

まず最初に、HTTPクラスの機能性についてお話します。私たちは、レガシー構文の機能を新しい構文に合うように報告し、適合させました。すなわち、HTTP、プロキシおよびサーバ認証、リダイレクト、チャンクされたレスポンス、および圧縮されたレスポンスという、そのほとんどの機能を含んでいます。また、リクエストをキャンセルする機能や、HTTPクライアントリクエストの新しいロギング(これについては次の段落で説明します)など、いくつかの機能を追加しました。新しい構文で報告する必要がある最後の機能は、キープアライブによる接続の持続です:これは、より顕著な機能としてすぐに登場します…別のブログ記事で説明します。ご期待ください。

さて、v19R7で新たに利用できるようになったHTTPクライアントロギングについて説明します。
HTTPクライアントロギングを有効にするのは非常に簡単で、以下の行をコードに追加するだけです。

HTTP SET OPTION(HTTP client log; HTTP enable log with all body parts)

そして、それはそれです!すべてのリクエストとレスポンスは、Logsディレクトリの4DHTTPClientLog_x.txtファイルに、サーバーログと同じフォーマットでログされます。

もちろん、リクエストとレスポンスを完全に記録することもできますが、長いレスポンスでログファイルを乱雑にしたくない場合は、レスポンスボディとリクエストボディさえも削除することができます。構文はサーバーログのアクティベーションに極めて近いので、驚くことはないでしょう。

最後に、HTTPクライアントログファイルに記録されるリクエストとそのレスポンス(ボディなし)の例を示します。

# REQUEST
# SequenceID: 7
# ConnectionID: DDF30D20070B0848B455971A0D627ED6
# LocalIP: 192.168.18.11:52097
# PeerIP: 192.168.4.7:3128
# TimeStamp: -1607148967
GET http://www.4d.com:80/ HTTP/1.1
Accept-Encoding: gzip, deflate
Connection: Close
Content-Length: 4
Content-Type: text/plain; charset=UTF-8
Date: Fri, 23 Sep 2022 09:30:58 GMT
Host: www.google.com
User-Agent: 4D_HTTP_Client/0.
[Body Size: 4]

# RESPONSE
# SequenceID: 6
# ConnectionID: 8EA22B111F16B04B92966DEFAA22704F
# LocalIP: 192.168.18.11:52090
# PeerIP: 192.168.4.7:3128
# TimeStamp: -1607191491
# ElapsedTimeInMs: 154
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Connection: close
Content-Encoding: gzip
Content-Length: 6185
Content-Type: text/html; charset=ISO-8859-1
Date: Fri, 23 Sep 2022 09:30:16 GMT
Expires: -1
Via: 1.1 proxy-squid (squid/3.5.27)
[Body Size: 6185]

この新機能についてご意見があれば、4D公式フォーラムでお気軽にシェアしてください。

Nicolas Brachfogel
- プロダクトオーナー & シニアデベロッパー - Nicolas Brachfogelは、2017年にシニアデベロッパーとして4Dに入社しました(4D Serverとネットワークを担当)。Apple Siliconのリリースを管理するプロダクトオーナーとして、ユーザーストーリーを書いて機能仕様に落とし込み、機能実装が顧客のニーズを満たしているかを確認する役割を担っています。Institut Supérieur d'Informatique Appliquée (INSIA) を卒業した Nicolas は、2001年にソフトウェア開発者としてのキャリアをスタートさせました。JavaとC++で数年間コーディングした後、ゲーム会社のクライアント・サーバー開発を専門に担当。サーバー開発者/アーキテクトとして、多くのゲーム(Dofus Arena、Drakerz、Trivial Pursuit Go!)のサーバーアーキテクチャに携わり、成功を収めてきました。