Difference between revisions of "User:Opensource Obscure/http"

From Second Life Wiki
Jump to navigation Jump to search
m
m (Replaced content with 'BACK to User:Opensource_Obscure * https://wiki.secondlife.com/wiki/User:Opensource_Obscure/http/snurl-sample * https://wiki.secondlife.com/wiki/U...')
Line 1: Line 1:
[[User:Opensource_Obscure|BACK to User:Opensource_Obscure]]
[[User:Opensource_Obscure|BACK to User:Opensource_Obscure]]


 
* https://wiki.secondlife.com/wiki/User:Opensource_Obscure/http/snurl-sample
== Web Form to send messages in-world from a webpage ==
* https://wiki.secondlife.com/wiki/User:Opensource_Obscure/http/text-db
 
The following LSL script requests a new LSL Server public URL, then makes an HTTP call that updates a DB with the public URL of the script. A form read the URL from the DB and lets users send a message from a web page to the script.
<br>
It supports an automatic system to work around the dynamic URL problem. This requires a web hosting with PHP/MySQL support and a field in a database.
<br>It sort-of works (only in a few sims on the beta grid!), but it's not complete yet; also, it's probably horrible code, I'm not a developer - don't use this if you don't know what you're doing.
 
 
== LSL code ==
 
<lsl>
    string my_url;
    key http_request_id;
    string base_url = "http://..../update.php?q="; // LA TUA PAGINA PHP
 
    default
    {
        state_entry()
        {
            llRequestURL();   
        }
 
        http_request(key id, string method, string body)
        {
            if (method == URL_REQUEST_GRANTED)
            {
                my_url = body;
                llOwnerSay("chiamero' questo indirizzo: " + base_url + my_url);
                llSetObjectDesc(my_url);
                http_request_id = llHTTPRequest(base_url + my_url, [HTTP_METHOD, "POST"], "");           
            }
            else if (method == URL_REQUEST_DENIED)
            {
                llOwnerSay("Errore: non ricevo il mio URL. " + body);
            }
            else if (method == "GET")
            {
                string text = llGetHTTPHeader(id, "x-query-string");
                llSetText(text, <1,1,1>, 1);
                llHTTPResponse(id,200,"OK!");
                llSay(0, "sono stato chiamato da web");
            }
            else
            {
                llHTTPResponse(id,405,"Unsupported Method");
            }
        }
 
        touch_start(integer total_number)
        {
            llOwnerSay("Il mio URL e': " + my_url);
            http_request_id = llHTTPRequest(base_url + my_url, [], "");         
        }
 
 
        http_response(key request_id, integer status, list metadata, string body)
        {
            if (request_id == http_request_id)
            {
                // llInstantMessage(llGetOwner(), body);
            }
        }     
 
 
    }
</lsl>
 
 
== HTML / PHP code ==
<lsl>
    <html>
    <head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
 
    <body>
 
    <?php
    include 'config.php';
    include 'opendb.php';
 
    $query  = "SELECT * FROM `http-in`";
    $result = mysql_query($query);
 
    while($row = mysql_fetch_array($result, MYSQL_ASSOC))
    {
        echo "<a href=\"{$row['url']}\">{$row['url']}</a><br><br>";
        $newurl = $row['url']."/test";
    }
 
    include 'closedb.php';
    ?>
 
 
    <form action ="<?php echo $newurl ?>" method="get">
    <input name="text">
    <input type="submit">
    </form>
 
    </body>
    </html>
</lsl>
 
 
== Headers (http request) ==
 
=== LSL ===
<lsl>string baseurl = "http://....file.php?";
key http_request_id;
string dato = "HTTP_X_SECONDLIFE_OWNER_KEY";
   
default
{
    state_entry()
    {
        llSay(0, "Hello, Avatar!");
    }
 
    touch_start(integer total_number)
        {
            http_request_id = llHTTPRequest(baseurl + dato, [], "");         
        }
        http_response(key request_id, integer status, list metadata, string body)
        {
            if (request_id == http_request_id)
            {
                llInstantMessage(llGetOwner(), body);
            }
        }     
 
}
</lsl>
 
=== HTML ===
<lsl><HTML><HEAD></HEAD><BODY>
 
<?php
foreach ($_SERVER as $k => $v)
{
if( $k == $_SERVER['QUERY_STRING'])
{
print $k. "\n";
print $v;
}
}
 
?>
 
</BODY>
</HTML>
</lsl>

Revision as of 14:40, 20 July 2009