HTTP_VARIABLE、NEXT_HTTP_VARIABLE、HTTP_HEADER、NEXT_HTTP_HEADER 関数は、クライアントが指定した変数とヘッダに対して反復するために使用できます。
ストアドプロシージャ内で NEXT_HTTP_VARIABLE と HTTP_VARIABLE 関数を使用して、クライアントが指定したすべての変数に対して反復処理を実行できます。
HTTP_VARIABLE 関数では、変数名の値を取得できます。
NEXT_HTTP_VARIABLE 関数を使用すると、クライアントから送信されたすべての変数に対する反復処理を実行できます。最初の変数名を取得するために関数を初めて呼び出す場合は、NULL 値を渡します。返された変数名を HTTP_VARIABLE 関数呼び出しのパラメータとして使用して、変数の値を取得します。前の変数名を next_http_variable 呼び出しで渡すと、次の変数名が取得されます。最後の変数名が渡されると、NULL が返されます。
変数名に対する反復処理を行うことによって各変数名が確実に 1 回のみ返されますが、変数名の順序はクライアント要求での順序とは異なる場合があります。
次の例は、ShowDetail サービスにアクセスするクライアント要求で指定されたパラメータから値を検索する、HTTP_VARIABLE 関数の使用方法を示しています。
CREATE SERVICE ShowDetail TYPE 'HTML' URL PATH OFF AUTHORIZATION OFF USER DBA AS CALL ShowDetail(); CREATE PROCEDURE ShowDetail() BEGIN DECLARE v_customer_id LONG VARCHAR; DECLARE v_product_id LONG VARCHAR; SET v_customer_id = HTTP_VARIABLE( 'customer_id' ); SET v_product_id = HTTP_VARIABLE( 'product_id' ); CALL ShowSalesOrderDetail( v_customer_id, v_product_id ); END; |
次の例は、image 変数に関連するヘッダフィールド値から 3 つの属性を検索する方法を示しています。
SET v_name = HTTP_VARIABLE( 'image', NULL, 'Content-Disposition' ); SET v_type = HTTP_VARIABLE( 'image', NULL, 'Content-Type' ); SET v_image = HTTP_VARIABLE( 'image', NULL, '@BINARY' ); |
2 番目のパラメータに整数を指定すると、追加の値を検索できます。3 番目のパラメータでは、ヘッダフィールド値をマルチパート要求から検索できます。ヘッダフィールド名を指定してこの値を検索します。
NEXT_HTTP_HEADER 関数と HTTP_HEADER 関数を使用して、HTTP 要求のヘッダを要求から取得できます。
HTTP_HEADER 関数は、指定された HTTP ヘッダフィールドの値を返します。
NEXT_HTTP_HEADER 関数は、HTTP ヘッダに対して反復され、次の HTTP ヘッダ名を返します。NULL を指定してこの関数を呼び出すと、最初のヘッダ名が返されます。後続のヘッダは、前のヘッダ名を関数に渡すことによって取得されます。最後のヘッダ名が呼び出されると、NULL が返されます。
次の表は、いくつかの共通の HTTP 要求ヘッダと典型的な値を示します。
ヘッダ名 | ヘッダ値 |
---|---|
Accept | image/gif、image/x-xbitmap、image/jpeg、image/pjpeg、application/x-shockwave-flash、application/vnd.ms-excel、application/vnd.ms-powerpoint、application/msword、*/* |
Accept-Language | en-us |
Accept-Charset | utf-8、iso-8859-5;q=0.8 |
Accept-Encoding | gzip、deflate |
User-Agent | Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; WOW64; SV1; .NET CLR 2.0.50727) |
Host | localhost:8080 |
Connection | Keep-Alive |
次の表は、特殊なヘッダと典型的な値を示します。
ヘッダ名 | ヘッダ値 |
---|---|
@HttpMethod | GET |
@HttpURI | /demo/ShowHTTPHeaders |
@HttpVersion | HTTP/1.1 |
@HttpQueryString | id=-123&version=109&lang=en |
処理中の要求のステータスコードを設定するには、特別なヘッダ @HttpStatus を使用します。
次の例は、ヘッダの名前と値を HTML テーブルにフォーマットする方法を示しています。
ShowHTTPHeaders Web サービスを作成します。
CREATE SERVICE ShowHTTPHeaders TYPE 'RAW' AUTHORIZATION OFF USER DBA AS CALL HTTPHeaderExample(); |
NEXT_HTTP_HEADER 関数を使用する HTTPHeaderExample プロシージャを作成してヘッダ名を取得してから、HTTP_HEADER 関数を使用してその値を取得します。
CREATE PROCEDURE HTTPHeaderExample() RESULT ( html_string LONG VARCHAR ) BEGIN declare header_name LONG VARCHAR; declare header_value LONG VARCHAR; declare header_query LONG VARCHAR; declare table_rows XML; set header_name = NULL; set table_rows = NULL; header_loop: LOOP SET header_name = NEXT_HTTP_HEADER( header_name ); IF header_name IS NULL THEN LEAVE header_loop END IF; SET header_value = HTTP_HEADER( header_name ); SET header_query = HTTP_HEADER( '@HttpQueryString' ); -- Format header name and value into an HTML table row SET table_rows = table_rows || XMLELEMENT( name "tr", XMLATTRIBUTES( 'left' AS "align", 'top' AS "valign" ), XMLELEMENT( name "td", header_name ), XMLELEMENT( name "td", header_value ), XMLELEMENT( name "td", header_query ) ); END LOOP; SELECT XMLELEMENT( name "table", XMLATTRIBUTES( '' AS "BORDER", '10' AS "CELLPADDING", '0' AS "CELLSPACING" ), XMLELEMENT( name "th", XMLATTRIBUTES( 'left' AS "align", 'top' AS "valign" ), 'Header Name' ), XMLELEMENT( name "th", XMLATTRIBUTES( 'left' AS "align", 'top' AS "valign" ), 'Header Value' ), XMLELEMENT( name "th", XMLATTRIBUTES( 'left' AS "align", 'top' AS "valign" ), 'HTTP Query String' ), table_rows ); END; |
Web ブラウザで ShowHTTPHeaders にアクセスして、HTML テーブルに配置された要求ヘッダを確認します。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |