BlackSheep-LSL@Wiki llHTTPRequest
※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

llHTTPRequest

key llHTTPRequest(string url, list parameters, string body)

引数urlのアドレスに対してparametersとbodyを使ってHTTPリクエストを送る。
いわゆるWeb連携を行うための関数である。

urlに指定するのは、Webブラウザでお馴染みの、"http://"で始まるURLアドレスである。

parametersには以下のようなキーと値のセットをリストとして指定する。
 [キー1, 値1, キー2, 値2...]
必要な数だけキーと値のセットを繰り返す。

指定できるキーは以下の通り。

キー キーの値 値の型 値の初期値 説明
HTTP_METHOD 0 string "GET" "GET","POST","PUT","DELETE"のいずれか。
HTTP_MIMETYPE 1 string "text/plain;charset=utf-8" MIMEタイプ。フォーム入力をエミュレートするには"application/x-www-form-urlencoded"を使う。
HTTP_VERIFY_CERT 3 integer TRUE SSL証明の厳密さを指定する・・・らしい。FALSEだとどんなSSL証明でもOKになる

llHTTPRequest関数はkey型の戻り値を返す。
これはhttp_responseイベントで返って来るリクエストのIDである。
仮に戻り値がNULL_KEYだった場合は、HTTPリクエストはコケている。

この関数によるHTTPリクエストには、以下のヘッダーが自動的に付加される。

ヘッダ・キー ヘッダ・値 意味
Accept text/* 受け入れ可能なMIMEタイプ
Accept-Charset utf-8;q=1.0, *;q=0.5 受け入れ可能なコードセット
User-Agent Second Life LSL/VERSION (http://secondlife.com/) リクエスト送信アプリケーションとそのバージョン
X-SecondLife-Shard "Production" 通常固定値。
X-SecondLife-Object-Name NAME リクエストを送信したオブジェクト名
X-SecondLife-Object-Key KEY リクエストを送信したオブジェクトのUUID
X-SecondLife-Region NAME(X,Y) リクエスト送信時の土地名及び位置(グリッド座標)
X-SecondLife-Local-Position (X,Y,Z) リクエストを送信したオブジェクトの位置
X-SecondLife-Local-Rotation (X,Y,Z, W) リクエストを送信したオブジェクトの回転値
X-SecondLife-Local-Velocity (X,Y,Z) リクエストを送信したオブジェクトの速度
X-SecondLife-Owner-Name NAME リクエストを送信したオブジェクトのオーナー名
X-SecondLife-Owner-Key KEY リクエストを送信したオブジェクトのオーナーのUUID

要するにこれらの情報については、いちいち別途送信しなくてもWebサーバー側で取得可能ということである。
便利な世の中だ。

さて、例を示しておこうと思うが、実際に動かせるサンプルとなるとWebサーバー側の実装が不可欠になる。
わざわざそこまで用意する暇がないので、LSL-Wikiからサンプルを紹介させていただく。

以下のコードはアバターの名前からUUIDを取得する。
UUIDから名前を得る関数は存在するが(llKey2Name関数)、その逆は存在しない。
それが納得いかず、名前からUUIDを検索する外部Webサービスを作った人たちがいる。

そのサービスを利用することで、名前からUUIDを調べることが可能だ。
以下がそのためのスクリプトである。

key requestid;
string resident;

default
{
  state_entry()
  {
    llListen(1,"","","");
  }

  listen( integer chan, string name, key id, string msg )
  {
    list names = llParseString2List(msg,[" "],[]);
    resident = llDumpList2String(names," ");
    requestid = llHTTPRequest("http://w-hat.com/name2key?name="+llDumpList2String(names,"+"),[HTTP_METHOD,"GET"],"");
  }

  http_response(key request_id, integer status, list metadata, string body)
  {
    if (request_id == requestid)
    {
      integer i = llSubStringIndex(body,resident);
      if ( i != -1 )
        llSay(0,llGetSubString(body,i,i+llStringLength(resident)+36));
      else
        llSay(0,"No resident named \""+resident+"\" found in the w-hat name2key database");
    } else
    llSay(0,(string)status+" error");
  }
}

名前:
コメント: