要求の検証
CSP サーバは、HTTP 要求に応答する際、受信要求に関する情報を %request オブジェクトにパッケージ化します。これは、すべての CSP ページで利用できます。この変数は %CSP.RequestOpens in a new tab のインスタンスです。
CSP ページでは、%session オブジェクトにもアクセスできます。このオブジェクトを使用して、ページからページに追加のデータを渡すことができます。
URL
受信 HTTP 要求の URL (クエリ文字列は含まない) を見つけるには、%request オブジェクトの URL プロパティを使用します。
Write "URL: ", %request.URL
URL パラメータ
URL にはパラメータのリスト (URL クエリとも呼ばれる) が含まれることがあります。%request オブジェクトは、Data プロパティを介してこれらのパラメータを利用可能にします。
例えば、受信 URL に以下が含まれているとします。
/csp/user/MyPage.csp?A=10&a=20&B=30&B=40
以下を使用して、サーバ上でこれらのパラメータを取得できます。
Write %request.Data("A",1) // this is 10
Write %request.Data("a",1) // this is 20
Write %request.Data("B",1) // this is 30
Write %request.Data("B",2) // this is 40
Data は多次元プロパティで、その中に格納される各値には、パラメータ名とパラメータのインデックス番号の 2 つの添え字があります (パラメータは上記の B のように 1 つの URL 内で複数回出現する場合があります)。このパラメータ名は大文字と小文字を区別しますので、注意してください。
また、受信 HTTP 要求が GET 要求であるか POST 要求であるかは重要ではないことにも注意してください。Data プロパティはどちらの場合もまったく同じようにパラメータ値を表します。
ObjectScript $Data 関数を使用して、指定のパラメータ値が定義されているかどうかをテストできます。
If ($Data(%request.Data("parm",1))) {
}
パラメータを参照したいが、それが定義されているかどうかわからない場合は、ObjectScript $Get 関数を使用できます。
Write $Get(%request.Data("parm",1))
以下のように %request オブジェクトの Count メソッドを使用して、特定のパラメータ名にいくつの値が定義されているかを調べることができます。
For i = 1:1:%request.Count("parm") {
Write %request.Data("parm",i)
}
パラメータ値が暗号化されている場合でも、同じ手法を使用できます。
フォーム・データ
CSP サーバは、フォーム送信要求を受け取ると、すべての名前/値のペアを %request オブジェクトの多次元 Data プロパティに配置します。ここで、Data の添え字は名前です。
例えば、以下のようなフォームの場合、
<form name="edit" method="post" action="GCSP.EncryptPage3.cls">
<p>Value A: <input type="text" name="inputA"></p>
<p>Value B: <input type="text" name="inputB"></p>
<p><input type="submit" value="Submit This" ></p>
</form>
サーバ上で、以下を使用して値 A と値 B の入力値を取得します。
set myvalueA=$GET(%request.Data("inputA",1))
set myvalueB=$GET(%request.Data("inputB",1))
InterSystems IRIS では、文字列長の制限を超える値を受け取ると、自動的にストリーム (%CSP.CharacterStreamOpens in a new tab のインスタンス) を作成し、そのストリームに値を書き込み、実際の値の代わりにストリーム OREF を Data プロパティに配置します。つまり、非常に長い文字列を受け取る可能性がある場合は、コードによってその値を検証してそれが OREF であるかどうかを確認し、それに従って処理を行う必要があるということです。
Set value=%request.Data("fieldname",1)
If $isobject(value) {
; Treat this as a stream
} Else {
; Treat this as a regular string
}
CGI 変数
Web サーバは CGI (Common Gateway Interface) 環境変数と呼ばれる一連の値を提供します。この変数には HTTP クライアントと Web サーバについての情報が含まれます。これらの CGI 環境変数の値にアクセスできるようにするには、%request オブジェクトの多次元プロパティ CgiEnvs を使用します。これは、Data プロパティと同じ方法で使用できます。
例えば、どのようなタイプのブラウザが HTTP 要求を行っているかを特定するには、以下のように CGI 環境変数 HTTP_USER_AGENT の値を調べます。
Write %request.CgiEnvs("HTTP_USER_AGENT")
利用可能な CGI 環境変数の詳細は、"CGI Environment Variables" を参照してください。
MIME データ
受信要求には、MIME (Multipurpose Internet Mail Extensions) データが含まれる場合があります。これは一般的に、ファイルのようなサイズの大きな情報に使用されます。MIME データは、%request オブジェクトの多次元プロパティ MimeData を使用して取得できます。