Difference between revisions of "LlRequestURL"

From Second Life Wiki
Jump to navigation Jump to search
(need to do more but have to visit bathroom)
Line 2: Line 2:
|func_id=345|func_sleep=0.0|func_energy=10.0|mode
|func_id=345|func_sleep=0.0|func_energy=10.0|mode
|func=llRequestURL|return_type=key
|func=llRequestURL|return_type=key
|func_footnote
|func_footnote=
|func_desc=Requests one HTTP:// url for use by this object. The [[http_request]] event is triggered with the results.
|func_desc=Requests one HTTP:// url for use by this script. The [[http_request]] event is triggered with the result of the request.
|return_text=that is the handle used for identifying the request in the [[http_request]] event.
|return_text=that is the handle used for identifying the result in the [[http_request]] event.
|spec
|spec
|caveats=*When a region is (re)started all [[http_request|HTTP server]] URLs are automatically released and invalidated.
|caveats=*When a region is (re)started all [[http_request|HTTP server]] URLs are automatically released and invalidated.
**Use [[CHANGED_REGION_START]] to detect this so new URL can be requested.
**Use [[CHANGED_REGION_START]] to detect this so new URL can be requested.
*An old URL MUST be released first by using [[llReleaseURL]] if you are requesting an new one (where the reason for is not a region restart) or it will be still active and you are losing free URLs.
*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.
|constants
|constants
|examples=
|examples=
Requesting a new URL after region restart:
This script requests a new URL after region restart:
<LSL>
<LSL>string url;
default
{
state_entry()
{
  //Requesting a URL
  llRequestURL();
}
changed(integer What)
{
  //Resgion restartet
  if (What & CHANGED_REGION_START)
  {
  //Request new URL
  llRequestURL();
  }
}
http_request(key ID, string Method, string Body)
{
  if (Method == URL_REQUEST_GRANTED)
  {
  //Saying URL to owner
  llOwnerSay(Body);
  }
  else if (Method == URL_REQUEST_DENIED)
  {
  llOwnerSay("No URLs free !");
  }
  else if (Method == "GET")
  {llHTTPResponse(ID, 200, "Hello there !");}
}
}
</LSL>
Here the old URL will be released anytime when the region restarts.


If you want to request a new URL and the region is not restarted you need to store the old one and release it manually before requesting a new one or your limit on free URLs will be down quick.
default {
    state_entry() {
        //Requesting a URL
        llRequestURL();
    }
    changed(integer What) {
        //Resgion restartet
        if (What & CHANGED_REGION_START) {
            //Request new URL
            llRequestURL();
        }
    }
    http_request(key ID, string Method, string Body) {
        if (Method == URL_REQUEST_GRANTED) {
            //Saying URL to owner
            url = Body;
            llOwnerSay(url);
        } else if (Method == URL_REQUEST_DENIED) {
            llOwnerSay("No URLs free !");
        } else if (Method == "GET") {
            llHTTPResponse(ID, 200, "Hello there !");
        }
    }
}</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.
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.
Removing the prim/script will release all URLs previous assigned.
<LSL>
<LSL>//Quickly allocates all available URLs
default
//Touching
{
 
state_entry()
//deleting the script or derezzing the prim/object to releases the URLs
{
 
  //Requesting a URL
 
  llRequestURL();
 
}
default {
http_request(key ID, string Method, string Body)
    state_entry() {
{
        //Requesting a URL
  if (Method == URL_REQUEST_GRANTED)
        llRequestURL();
  {
    }
  //Printing new URL and free adresses
    http_request(key ID, string Method, string Body) {
  llSetText((string)llGetFreeURLs() + "\n" + Body, <1, 1, 1>, 1);
        if (Method == URL_REQUEST_GRANTED) {
  //Requesting a URL
            //Printing new URL and number of free addresses
  llRequestURL();
            llSetText( (string)llGetFreeURLs() + "\n" + Body, <1, 1, 1 >, 1);
  }
            //Requesting a URL
  else if (Method == URL_REQUEST_DENIED)
            llRequestURL();
  {
        } else if (Method == URL_REQUEST_DENIED) {
  llSetText("No URLs free !", <1, 0, 0>, 1);
            llSetText("No URLs free !", <1, 0, 0 >, 1);
  }
        } else if (Method == "GET") {
  else if (Method == "GET")
            llHTTPResponse(ID, 200, "Hello there !");
  {llHTTPResponse(ID, 200, "Hello there !");}
        }
}
    }
}
}</LSL>
</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.
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]].
Just store the old URL in a global variable and release it with [[llReleaseURL]].

Revision as of 14:30, 29 August 2009

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.
  • 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>string url;

default {

   state_entry() {
       //Requesting a URL
       llRequestURL();
   }
   changed(integer What) {
       //Resgion restartet
       if (What & CHANGED_REGION_START) {
           //Request new URL
           llRequestURL();
       }
   }
   http_request(key ID, string Method, string Body) {
       if (Method == URL_REQUEST_GRANTED) {
           //Saying URL to owner
           url = Body;
           llOwnerSay(url);
       } else if (Method == URL_REQUEST_DENIED) {
           llOwnerSay("No URLs free !");
       } else if (Method == "GET") {
           llHTTPResponse(ID, 200, "Hello there !");
       }
   }

}</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

Deep Notes

History

Signature

function key llRequestURL();