Wenn Sie HTTP-Webdienst-Clientprozeduren erstellen, verwenden Sie diese Klausel, um Headereinträge der HTTP-Anforderung hinzuzufügen, sie zu ändern oder zu löschen. Die Angabe von Headern ist dem Format sehr ähnlich, das im RFC2616 Hypertext Transfer Protocol - HTTP/1.1 und im RFC822 Standard für ARPA Internet-Textnachrichten verwendet wird, nämlich dass nur druckbare ASCII-Zeichen für HTTP-Header angegeben werden können, deren Groß- und Kleinschreibung nicht berücksichtigt wird. Es folgen einige wichtige Punkte in Bezug auf die HTTP-Header-Angabe:
Header/Wertepaare können durch \n oder \x0d\n begrenzt werden, indem Sie Zeilenvorschub (Line Feed, <LF>) bzw. Wagenrücklauf und Zeilenvorschub (Carriage Return und Line Feed, <CR><LF>) angeben.
Ein Header wird von seinem Wert mit einem Doppelpunkt (:) getrennt und darf daher keinen Doppelpunkt enthalten.
Ein Header, dem ein :\n oder ein Zeilenende folgt, gibt einen Header ohne Wert an, wie auch ein Header ohne nachfolgenden
Doppelpunkt oder Wert. Beispiel: HEADER 'Date'
gibt an, dass der Date-Header nicht aufgenommen werden sollte. Das Unterdrücken von Headern oder ihrer Werte kann zu unerwarteten
Ergebnissen führen. Weitere Hinweise finden Sie unter HTTP-Header ändern.
Das Umbrechen langer Headerwerte wird unterstützt, sofern ein oder mehrere Leerzeichen dem \n unmittelbar folgen. Die folgende HEADER-Angabe und die resultierende HTTP-Ausgabe sind z.B. semantisch äquivalent:
HEADER 'heading1: This long value\n is a really long value for heading1\n heading2:shortvalue' |
HEADER 'heading1:This long value is a really long value for heading1<CR><LF> heading2:shortvalue<CR><LF>' |
Mehrere aufeinanderfolgende Leerzeichen, wie auch ein Zeilenumbruch, ergeben ein einziges Leerzeichen.
Die Ersetzung von Parametern wird bei dieser Klausel unterstützt.
Dieses Beispiel zeigt, wie Sie statische benutzerdefinierte Header hinzufügen:
CREATE PROCEDURE http_client() URL 'http://localhost/getdata' TYPE 'http:get' HEADER 'UserHeader1:value1\nUserHeader2:value2'; |
Dieses Beispiel zeigt, wie Sie Parameter-ersetzte benutzerdefinierte Header hinzufügen:
CREATE PROCEDURE http_client( headers LONG VARCHAR ) URL 'http://localhost/getdata' TYPE 'http:get' HEADER '!headers'; CALL http_client( 'NewHeader1:value1\nNewHeader2:value2' ); |
Mit einer Kombination der Funktionen NEXT_HTTP_HEADER und HTTP_HEADER können Sie Header in HTTP-Anforderungen erhalten. Die Funktion NEXT_HTTP_HEADER wird in den HTTP-Headern wiederholt, die in eine Anforderung einbezogen sind, und gibt den nächsten HTTP-Headernamen zurück. Sie mit NULL aufzurufen führt dazu, dass sie den Namen des ersten Headers zurückgibt. Nachfolgende Header werden abgerufen, indem der Funktion der Name des vorherigen Headers weitergegeben wird. Diese Funktion gibt NULL zurück, wenn sie mit dem Namen des letzten Headers aufgerufen wird.
Wenn diese Funktion mehrfach aufgerufen wird, werden alle Header genau einmal zurückgegeben, jedoch nicht unbedingt in der Reihenfolge, in der sie in der HTTP-Anfrage erscheinen.
Die Funktion HTTP_HEADER gibt den Wert des benannten HTTP-Header-Felds zurück oder NULL, wenn die Funktion nicht von einem HTTP-Dienst aufgerufen wurde. Sie wird verwendet, wenn eine HTTP-Anforderung über einen Webdienst verarbeitet wird. Wenn ein Header für einen angegebenen Feldnamen nicht existiert, ist der Rückgabewert NULL.
Die folgende Tabelle enthält einige typische HTTP-Header und -Werte.
Headername | Headerwert |
---|---|
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 |
UA-CPU | x86 |
Accept-Encoding | gzip, deflate |
User-Agent | Mozilla/4.0 (kompatibel; 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 |
Um den Wert der einzelnen Header abzufragen, verwenden Sie die Funktion NEXT_HTTP_HEADER, um den Namen des Headers zu erhalten, und dann die Funktion HTTP_HEADER, um seinen Wert zu erhalten. Das folgende Beispiel zeigt, wie Sie hierzu vorgehen.
CREATE PROCEDURE HTTPHeaderExample() RESULT ( html_string LONG VARCHAR ) BEGIN declare header_name long varchar; declare header_value 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 ); -- 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 ) ); 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' ), table_rows ); END; |
Das folgende Beispiel formatiert die Headernamen und -werte in Form einer HTML-Tabelle. Der folgende Dienst kann definiert werden, um zu zeigen, wie diese Beispielprozedur arbeitet.
CREATE SERVICE ShowHTTPHeaders TYPE 'RAW' AUTHORIZATION OFF USER DBA AS CALL HTTPHeaderExample(); |
Öffnen Sie einen Webbrowser und geben Sie den folgenden URL an, um den Dienst zu testen:
http://localhost:80/demo/ShowHTTPHeaders
Um den Statuscode (oder Antwortcode) der Anforderung, die abgearbeitet wird, zu setzen, verwenden Sie den @HttpStatus-Spezial-Header. Weitere Hinweise finden Sie unter sa_set_http_header-Systemprozedur.
Weitere Hinweise zur Header-Verarbeitung finden Sie unter Webdienstfunktionen.
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |