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 |
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 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |