HTTP 応答の使用法
ここでは、HTTP 応答オブジェクト (%Net.HttpResponseOpens in a new tab のインスタンス) の使用法について説明します。
応答のデータへのアクセス
HTTP 応答の本文は、応答の Data プロパティに含まれています。このプロパティには、ストリーム・オブジェクト、具体的には %GlobalBinaryStreamOpens in a new tab が含まれています。%GlobalBinaryStreamOpens in a new tab は非推奨になっていますが、このような使用法は引き続きサポートされています。このユース・ケースで別のストリーム・クラスに置き換えることはお勧めできません。
このストリームを使用するには、ストリーム・メソッド Write()、WriteLine()、Read()、ReadLine()、Rewind()、MoveToEnd()、および Clear() を使用します。また、ストリームの Size プロパティも使用できます。
要求 の ReadRawMode プロパティは、応答の本文を読み取る方法を制御します。
-
既定では、このプロパティは False であり、InterSystems IRIS では、本文が、応答の HTTP ヘッダで指定された文字セットである (かつ、それに応じて文字セットを変換している) と見なされます。
-
このプロパティが True の場合、本文が RAW モードで読み取られます (文字セットの変換は行いません)。
また、OutputToDevice() メソッドを使用して、完全な応答を現在のデバイスに書き込むこともできます。ヘッダは、Web サーバによって生成された順序と同じ順序ではありません。
以下の簡単な例では、応答ストリームをファイルにコピーして保存します。
set request=##class(%Net.HttpRequest).%New()
set request.Server="tools.ietf.org"
set request.Https=1
set request.SSLConfiguration="TEST"
set status=request.Get("/html/rfc7158")
if $$$ISERR(status) {
do $system.OBJ.DisplayError()
} else {
set response=request.HttpResponse
}
Set file=##class(%FileCharacterStream).%New()
set file.Filename="c:/temp/rfc7158.html"
set status=file.CopyFrom(response.Data)
if $$$ISERR(status) {
do $system.OBJ.DisplayError()
}
do file.%Close()
名前による HTTP ヘッダの取得
%Net.HttpResponseOpens in a new tab クラスは、InterSystems IRIS 多次元配列内にその HTTP ヘッダを保存します。ヘッダにアクセスするには、以下のメソッドを使用します。
指定したヘッダの値を返します。
指定したヘッダの次のヘッダの名前を返します。
これらの各メソッドは、HTTP ヘッダの名前の文字列である単一の引数を取ります。
また、OutputHeaders() メソッドを使用して、HTTP ヘッダを現在のデバイスに書き込むこともできます (ただし、生成された順番と同じ順番ではありません)。
応答に関するその他の情報へのアクセス
%Net.HttpResponseOpens in a new tab クラスは、HTTP 応答のその他の特定の部分を保存するプロパティを提供します。
-
StatusLine は、応答の第 1 行目の HTTP ステータス行を保存します。
-
StatusCode は、HTTP ステータス・コードを保存します。
-
ReasonPhrase は、StatusCode に相当する人間が読める形式の理由を保存します。
-
ContentInfo は、応答本文についての追加情報を保存します。
-
ContentType は、Content-Type: ヘッダの値を保存します。
-
HttpVersion は、応答を送信した Web サーバがサポートする HTTP のバージョンを示します。