Ajax-Anwendung in Second Life

Seite 5: llHTTPRequest()

Inhaltsverzeichnis

Die Signatur der Funktion llHTTPRequest() lautet wie folgt:

key llHTTPRequest(string url, list parameters, string body)

url ist eine HTTP- oder HTTPS-Adresse eines Webservers außerhalb von Second Life, body im Fall von POST- oder PUT-Anfragen der zum Server geschickte Rumpf der HTTP-Nachricht. Bei parameters handelt es sich um eine Key-Value-Liste mit folgenden optionalen Keys und den jeweiligen Vorgabewerten:

HTTP_METHOD ("GET"): Angabe der HTTP-Methode; laut LSL-Wiki unterstützt die Funktion die Methoden GET, POST, PUT, DELETE.

HTTP_MIMETYPE ("text/plain;charset=utf-8"): entspricht dem Content-Type-Header von HTTP. Ein Abweichen vom Vorgabewert kann etwa sinnvoll sein, um eine Formulareingabe (mit dem Wert application/x-www-form-urlencoded) zu simulieren. Die Methode könnte in diesem Falle POST sein, und die vermeintlichen Formulardaten sollten korrekt kodiert im Body-Parameter von llHTTPRequest() stehen. Für die Kodierung steht die Funktion llEscapeURL() zur Verfügung.

HTTP_BODY_MAXLENGTH ("2048"): maximale Länge der erhaltenen HTTP-Nachricht. Laut Wiki kann man derzeit keinen anderen Wert als den Vorgabewert setzen.

HTTP_VERIFY_CERT ("TRUE"): gibt an, ob für HTTPS-Verbindungen nur Zertifikate bekannter "certificate authorities" akzeptiert werden (Vorgabeverhalten). Falls der Wert auf FALSE gesetzt ist, akzeptiert llHTTPRequest() jedes SSL-Zertifikat.

llHTTPRequest() liefert einen Wert vom Typ key zurück, der die Anfrage eindeutig identifiziert. Nach Beendigung der Anfrage wird dieser Wert an den Event-Handler http_response() übergeben. Falls die an llHTTPRequest() übergebenen Parameter zu einem Fehler führen, ist der Rückgabewert gleich NULL_KEY.

Ein HTTP-Request aus Second Life ist serverseitig durch die Angabe Second Life LSL/VERSION (http://secondlife.com/) als HTTP-User-Agent zu erkennen. VERSION steht für die jeweils aktuelle Versionsnummer. Darüber hinaus schickt der SL-Request noch einige nicht Standard-HTTP-Header an den Server. Darunter die UUID des kommunizierenden SL-Objekts, Name und Key des Avatars, dem das Objekt gehört, sowie SL-Geokoordinaten.

http_response()

Der Event-Handler http_response() reagiert auf eingehende HTTP-Nachrichten und entspricht ungefähr dem onReadyStateChange des XMLHTTPRequest-Objekts in Javascript. Die Signatur lautet:

http_response(key request_id, integer status, list
metadata, string body)

Die request_id ist der von llHTTPRequest() gelieferte Key, der den Request identifiziert. status repräsentiert einen Integerwert und entspricht dem HTTP-Status (beispielsweise 200 für erfolgreiche Anfrage, 404 für ‚ÄûNot found‚Äú). Bei metadata handelt es sich um eine Liste von Key-Value-Paaren. Derzeit gibt es nur einen Key: HTTP_BODY_TRUNCATED. Dessen Integerwert gibt an, an welcher Byte-Position die vom Server geschickte Nachricht abgeschnitten wurde. Das kann passieren, falls die Nachricht länger als der oben genannte HTTP_BODY_MAXLENGTH-Wert ist. body enthält schließlich die Nutzlast. Falls der Content-Type kein text/*-Typ ist (etwa text/plain), steht in body die Zeichenkette "Unsupported or unknown Content-Type". Falls SL die Zeichenkodierung nicht unterstützt, enthält body den Hinweis "Unsupported or unknown character set".