LlHTTPRequest/ja
From Second Life Wiki
| フラグ | 値の型 | 初期値 | 解説 | |
|---|---|---|---|---|
| HTTP_METHOD | 0 | string | "GET" | 'GET', 'POST', 'PUT' と 'DELETE' |
| HTTP_MIMETYPE | 1 | string | "text/plain;charset=utf-8" | text/* MIMEはcharsetを特定できるようにすべきです。application/x-www-form-urlencodedを用いてHTMLフォームをエミュレートできるようにするためです。これによってbodyを、var=value&var2=value2の形式で適切にエスケープ(llEscapeURL)した一連の<name,value>ペアにセットして、webフレームワークで自動的にパースできるようになります。 |
| HTTP_BODY_MAXLENGTH | 2 | integer | 2048 | HTTP_BODY_MAXLENGTHはまだサポートされていません。 |
| HTTP_VERIFY_CERT | 3 | integer boolean | TRUE | TRUEの場合、HTTPSリクエストを作成する際に、サーバーのSSL認証が標準的な認証機関のどれかを用いて認証できる状態にしておく必要があります。FALSEの場合は、すべてのサーバーSSL認証は無条件に受け入れられます。 |
| ヘッダ | 解説 | データ例 |
|---|---|---|
| X-SecondLife-Shard | オブジェクトの存在する環境。"Production"はメイングリッド、"Testing"はプレビューグリッドです。 | Production |
| X-SecondLife-Object-Name | スクリプトを保有しているオブジェクト名。 | Object |
| X-SecondLife-Object-Key | スクリプトを保有しているオブジェクトのキー。 | 01234567-89ab-cdef-0123-456789abcdef |
| X-SecondLife-Region | オブジェクトが存在するリージョンの名前で、リージョンの南西角のグローバル構成に従います。 | Jin Ho (264448, 233984) |
| X-SecondLife-Local-Position | リージョン内でのオブジェクトの位置。 | (173.009827, 75.551231, 60.950001) |
| X-SecondLife-Local-Rotation | スクリプトを保有しているオブジェクトの回転 | 0.000000, 0.000000, 0.000000, 1.000000 |
| X-SecondLife-Local-Velocity | オブジェクトの重点。 | 0.000000, 0.000000, 0.000000 |
| X-SecondLife-Owner-Name | オブジェクトのオーナ名。 | Zeb Wyler |
| X-SecondLife-Owner-Key | オブジェクトオーナのUUID | 01234567-89ab-cdef-0123-456789abcdef |
| CGI環境はそのままの名前を大文字にした変数でヘッダーを設置し、ダッシュをアンダースコアに置き換え、"HTTP_"を名前の前につけます。例えば"X-SecondLife-Object-Name"は"HTTP_X_SECONDLIFE_OBJECT_NAME"となります。 | ||
警告
- url内にスペースがある場合、http_responseのステータスコードは499になるでしょう。
- レスポンスボディは2048バイトが上限です。長い場合は切り捨てられるでしょう。
- リクエストはオブジェクト単位を基準として抑制されます。(プリム単位ではありません)
- インターネットからテクスチャあるいは画像を呼び出すことには使えません。詳細はWeb Texturesをみましょう。.
- アクセスしたサイトがL$トランザクションをレポートするLSLスクリプトに依存する場合、スクリプトはベータグリッド上で走っているかどうかを確認するために、X-SecondLife-Shardヘッダを確認すべきです。
- いくつかのサーバは、テキストかHTMLファイルのような承認できないメタデータファイルのPOSTの場合、405エラーを返すでしょう。いずれの環境でも確実に成功するGETメソッドを使うようにしましょう。
例
key http_request_id; default { state_entry() { http_request_id = llHTTPRequest("url", [], ""); } http_response(key request_id, integer status, list metadata, string body) { if (request_id == http_request_id) { llSetText(body, <0,0,1>, 1); } } }
PHPテストスクリプト例
<?php header("content-type: text/plain; charset=utf-8"); ?> 受信したヘッダ: <?php /** * @author Wouter Hobble * @copyright 2008 */ foreach ($_SERVER as $k => $v) { if( substr($k, 0, 5) == 'HTTP_') { print "\n". $k. "\t". $v; } } ?>
Apacheヘッダとグローバルメソッドの両方をキャプチャするラッパースクリプト例
<?PHP // Author Waster Skronski. // General Public License (GPL). // Mind that some headers are not included becouse they either useless or unreliable. $USE_APACHE_HEADERS = TRUE; // switch to false if you need cgi methode if ($USE_APACHE_HEADERS) { $headers = apache_request_headers(); $objectgrid = $headers["X-SecondLife-Shard"]; $objectname = $headers["X-SecondLife-Object-Name"]; $objectkey = $headers["X-SecondLife-Object-Key"]; $objectpos = $headers["X-SecondLife-Local-Position"]; $ownerkey = $headers["X-SecondLife-Owner-Key"]; $ownername = $headers["X-SecondLife-Owner-Name"]; $regiondata = $headers["X-SecondLife-Region"]; $regiontmp = explode ("(",$regiondata); // cut cords off $regionpos = explode (")",$regiontmp[1]); // $regionname = substr($regiontmp[0],0,-1); // cut last space from simname } else { $db = $GLOBALS; $headers = $db['HTTP_ENV_VARS']; $objectgrid = $headers["HTTP_X_SECONDLIFE_SHARD"]; $objectname = $headers["HTTP_X_SECONDLIFE_OBJECT_NAME"]; $objectkey = $headers["HTTP_X_SECONDLIFE_OBJECT_KEY"]; $ownerkey = $headers["HTTP_X_SECONDLIFE_OWNER_KEY"]; $objectpos = $headers["HTTP_X_SECONDLIFE_LOCAL_POSITION"]; $ownername = $headers["HTTP_X_SECONDLIFE_OWNER_NAME"]; $regiondata = $headers["HTTP_X_SECONDLIFE_REGION"]; $regiontmp = explode ("(",$regiondata); $regionpos = explode (")",$regiontmp[1]); $regionname = substr($regiontmp[0],0,-1); } ?>
ノート
いずれかの理由でllHTTPRequest/http_responseを使っている間、素晴らしいRSSフィードやいくつかのwebコンテンツのフォームは解析不可能であり、SecondLife外でその作業をする必要があるでしょう。これはシミュレータレベルで更なるオーバヘッドが必要なヘッダをチェックしているため、近い将来に変更することが好ましくないからです。
llHTTPRequestが用いられたとき、期待された結果を返すPCウェブブラウザでの同じURLにも関わらず、いずれかのウェブサーバはnullあるいは無意味な結果を返すことが分かるはずです。これはllHTTPRequestのUserAgent文字列が"Mozilla"を保有していないとして、いずれかのウェブサーバから、例えばシャウトキャストあるいはRSSクライアントとされてしまい、ウェブブラウザの代わりとして承認されないからです。対応するには、" HTTP/1.0\nUser-Agent: LSL Script (Mozilla Compatible)\n\n"かこれに類似したウェブブラウザ自身のそれらしきHTTPリクエストの文字列を、解決するために付加しましょう。
CGI環境はそのままの名前を大文字にした変数でヘッダーを設置し、ダッシュをアンダースコアに置き換え、"HTTP_"を名前の前につけます。例えば"X-SecondLife-Object-Name"は"HTTP_X_SECONDLIFE_OBJECT_NAME"となります。
Apacheはログにヘッダを保有可能で、 管理にカスタムログとログフォーマットを用いています。構文上の詳細についてはドキュメントを参照しましょう。

