Skip to main content

要求の検証

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 を使用して取得できます。

FeedbackOpens in a new tab