llHTTPRequest
key llHTTPRequest(string url, list parameters, string body)
引数urlのアドレスに対してparametersとbodyを使ってHTTPリクエストを送る。
いわゆるWeb連携を行うための関数である。
いわゆる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_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からサンプルを紹介させていただく。
わざわざそこまで用意する暇がないので、LSL-Wikiからサンプルを紹介させていただく。
以下のコードはアバターの名前からUUIDを取得する。
UUIDから名前を得る関数は存在するが(llKey2Name関数)、その逆は存在しない。
それが納得いかず、名前からUUIDを検索する外部Webサービスを作った人たちがいる。
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"); } }