llGetHTTPHeader
string llGetHTTPHeader(key HTTPRequestID, string Header)Returns the value for header for request_id.
Returns a string that is the value of the Header for HTTPRequestID.
Parameters
-
HTTPRequestID(key) - A valid HTTP request key
-
Header(string) - Header value name
These headers are automatically generated by the simulator and were not sent by the requesting client. They provide information about the request to make parsing easier:
| Header | Description | Example |
|---|---|---|
x-script-url | The base URL as received from llRequestURL/llRequestSecureURL | https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322 |
x-path-info | Any trailing path information from the requested URL | /foo/bar |
x-query-string | Any query arguments (text after ? in the URL) | arg=gra |
x-remote-ip | IP address of the host that made the request |
Common Headers
Section titled “Common Headers”| Header | Description | Example |
|---|---|---|
user-agent | The user-agent header as reported by the requester |
Examples
Section titled “Examples”key url_request;
default{ state_entry() { url_request = llRequestURL(); }
http_request(key id, string method, string body) { if (url_request == id) { // Reset the query ID url_request = "";
if (method == URL_REQUEST_GRANTED) { llOwnerSay("URL: " + body);
key owner = llGetOwner(); vector ownerSize = llGetAgentSize(owner);
if (ownerSize) // != ZERO_VECTOR llLoadURL(owner, "I got a new URL!", body); } else if (method == URL_REQUEST_DENIED) llOwnerSay("Something went wrong, no url:\n" + body); } else { list headerList = ["x-script-url", "x-path-info", "x-query-string", "x-remote-ip", "user-agent"];
integer index = -llGetListLength(headerList); do { string header = llList2String(headerList, index); llOwnerSay(header + ": " + llGetHTTPHeader(id, header)); } while (++index);
llOwnerSay("body:\n" + body); llHTTPResponse(id, 200, body); } }}Caveats
Section titled “Caveats”- Header information becomes inaccessible after 30 seconds or if llHTTPResponse is called
- Function returns an empty string in any context outside the http_request event; it cannot be used in the http_response event
- Custom headers are not supported; only headers listed in the specification are supported
- LSL is not a CGI environment—“Content-Type” is an example of a normal header name; in a CGI environment, the name would be “HTTP_CONTENT_TYPE”
- Header must be lowercase (or it will match nothing); all header names are converted to lowercase when received
- When making a request with llHTTPRequest:
- The path part of the URL must be prefixed with a forward slash
- Good:
https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322/foo - Bad:
https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322foo
- Good:
- To use the query string, you must include a path (even if it is just a slash)
- Good:
https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322/?arg=gra - Bad:
https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322?arg=gra
- Good:
- The path part of the URL must be prefixed with a forward slash
See Also
Section titled “See Also”- llGetFreeURLs
- llRequestURL
- llRequestSecureURL
- llReleaseURL
- llHTTPResponse
- http_request event
- LSL http server