Http response

Da Second Life Italia Wiki.

Indice

[modifica] Evento http_response

[modifica] Descrizione

L'evento http_response viene scatenato quando lo script riceve dei dati da una pagina web richiamata utilizzando il comando [[ llHTTPRequest]]

[modifica] Sintassi

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

[modifica] Parametri

request_id
è la chiave identificativa ritornata dalla richiesta llHTTPRequest; è necessaria per distinguere più chiamate a pagine web esterne
status
codici HTTP (come 404 = errore)
metadata
parametri HTTP
body
contiene i dati restituiti dalla pagina web a cui è stata inoltrata la richiesta

[modifica] Esempio

Passiamo subito ad un esempio pratico per capire meglio il funzionamento. Supponiamo di avere un oggetto "Pulsante" che conterrà il nostro script, e un database esterno sul quale vogliamo salvare il nome di tutti gli avatar che hanno cliccato (touch) sul pulsante. Per fare ciò serve una pagina web (scritta per esempio in PHP) che scriva sul database, e di uno script LSL che chiami questa pagina passandogli il nome avatar. Ovviamente qui vedremo solo la parte LSL  ;-)

key http_request_id;
default
{
  touch_start(integer num)
  {
     http_request_id = llHTTPRequest(
       "http://www.ilmiositointernet.it/pagina.php?avatar="
         +llKey2Name(llDetectedKey(0)),
       [HTTP_METHOD,"POST",HTTP_MIMETYPE,
         "application/x-www-form-urlencoded"],
       "");
  }
}

In questo modo la nostra "pagina.php" riceverà la variabile avatar contenente il nome dell'avatar. Infatti llDetectedKey(0) restituisce la chiave corrispondente all'avatar che ha cliccato l'oggetto, mentre llKey2Name restituisce il suo nome; infine usando le funzioni built-in per le stringhe, "stringa" + variabile serve a concatenare una stringa fissa (nel nostro caso la prima parte dell'url) con una variabile SL (il valore della variabile avatar della pagina.php). A questo punto lo script termina senza sapere cosa accadrà e se andrà a buon fine il salvataggio su database. Usando invece il metodo http_response, oggetto di questa guida, potremo invece farci restituire informazioni dalla "pagina.php" come per esempio l'esito della procedura.


Integriamo quindi l'evento http_response nello script e vediamone il funzionamento.

key http_request_id;
default
{
  touch_start(integer num)
  {
     http_request_id = llHTTPRequest(
       "http://www.ilmiositointernet.it/pagina.php?avatar="+
         llKey2Name(llDetectedKey(0)), 
       [HTTP_METHOD,"POST",HTTP_MIMETYPE,
         "application/x-www-form-urlencoded"],
       "");
  }
  http_response(key request_id, integer status, list metadata, string body)
  {
     if (request_id == http_request_id)
     {
        llSay(0, body);
     }
  }
}

L'evento http_response scatterà quando la "pagina.php" ha finito l'elaborazione. La variabile body contiene il body della nostra pagina, quindi il concetto è che tutto ciò che la pagina scriverebbe nel browser viene invece passato allo script in questa variabile. Qui sotto faccio due esempi di pagina web, una in PHP e una per chi non conosce questo linguaggio che riporta il corrispondente in HTML, semplicissimi, due pagine che scrivono a video solamente la frase "Ciao Mondo!".


  • prova.php
<?php
echo "Ciao Mondo!";
?>
  • Corrispondente pagina scritta in HTML
<html>
<body>
Ciao Mondo!
</body>
</html>


Vediamo quindi cosa succede:

  1. Il nostro script chiama, attraverso llHTTPRequest, la pagina "pagina.php".
  2. Questa pagina crea un body contenente solo la scritta "Ciao Mondo!".
  3. Scatta l'evento http_response e nella variabile body troveremo "Ciao Mondo!".

Ora potremo quindi mettere in "pagina.php" il codice necessario per salvare il nome dell'avatar sul nostro database, e restituire un messaggio del tipo "OK" oppure "KO" (in base all'esito dell'inserimento su DB), che poi intercetteremo e useremo nell'evento http_response.

[modifica] Vedere anche

Strumenti personali