Difference between revisions of "LlRequestURL"
Kireji Haiku (talk | contribs) m |
Kireji Haiku (talk | contribs) m |
||
Line 32: | Line 32: | ||
changed(integer change) | changed(integer change) | ||
{ | { | ||
if (change & | if (change & CHANGED_REGION_START) | ||
request_url(); | request_url(); | ||
} | } |
Revision as of 02:53, 31 July 2012
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Summary
Function: key llRequestURL( );0.0 | Forced Delay |
10.0 | Energy |
Requests one HTTP:// url for use by this script. The http_request event is triggered with the result of the request.
Returns a key that is the handle used for identifying the result in the http_request event.
Caveats
- When a region is (re)started all HTTP server URLs are automatically released and invalidated.
- Use CHANGED_REGION_START to detect this so new URL can be requested.
- The number of available URLs is a limited resource, that is to say, a script can only have so many open URLs. See LSL http_server#Resource Limitations for details.
- When abandoning a URL, always release it with llReleaseURL, otherwise it will leak.
Examples
This script requests a new URL after region restart: <LSL> key urlRequestId; string url;
request_url() {
if (url != "") { llReleaseURL(url); url = ""; }
urlRequestId = llRequestURL();
}
default {
changed(integer change) { if (change & CHANGED_REGION_START) request_url(); }
state_entry() { request_url(); }
http_request(key id, string method, string body) { if (id == urlRequestId) { urlRequestId = NULL_KEY;
if (method == URL_REQUEST_GRANTED) { url = body; llOwnerSay(url); } else if (method == URL_REQUEST_DENIED) llOwnerSay("URL request has been denied! " + body); } else if (method == "GET") llHTTPResponse(id, 200, "Hello world!"); }
} </LSL> It's important to keep in mind that if you request another URL, that the old one will not be released, it will remain active. The following script drives home this point.
Try the following code ONLY if you can use all your URLs on your land. Removing the prim/script will release all URLs previous assigned. <LSL>//Quickly allocates all available URLs //Touching
//deleting the script or derezzing the prim/object to releases the URLs
default {
state_entry() { //Requesting a URL llRequestURL(); } http_request(key ID, string Method, string Body) { if (Method == URL_REQUEST_GRANTED) { //Printing new URL and number of free addresses llSetText( (string)llGetFreeURLs() + "\n" + Body, <1, 1, 1 >, 1); //Requesting a URL llRequestURL(); } else if (Method == URL_REQUEST_DENIED) { llSetText("No URLs free !", <1, 0, 0 >, 1); } else if (Method == "GET") { llHTTPResponse(ID, 200, "Hello there !"); } }
}</LSL> This script will, as you can see, use all URLs available on your land because it does not remove the old URLs before requesting a new one.
Just store the old URL in a global variable and release it with llReleaseURL.See Also
Functions
• | llRequestSecureURL | |||
• | llGetFreeURLs | |||
• | llReleaseURL | |||
• | llHTTPResponse | |||
• | llGetHTTPHeader |
Articles
• | LSL http server |