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。
遍历变量名可以保证每个变量名都刚好返回一次,但变量名的顺序不一定与它们在客户端请求中出现的顺序相同。
以下示例说明如何使用 HTTP_VARIABLE 函数来检索客户端请求提供的参数的值,该请求访问 ShowDetail 服务:
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 变量关联的标头字段值中检索三个属性。
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' ); |
提供整数作为第二个参数使您可以检索其它值。第三个参数允许您从包含多个部分的请求中检索标头字段值。提供标头字段的名称以检索其值。
可使用 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(兼容;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(); |
创建 HTTPHeaderExample 过程,该过程使用 NEXT_HTTP_HEADER 函数获取标头名,然后使用 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讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |