LlHTTPRequest/ja

From Second Life Wiki

メインページ > LlHTTPRequest > LlHTTPRequest/ja
Jump to: navigation, search

関数: key llHTTPRequest( string url, list parameters, string body );

指定したURL、リクエストの本体とパラメータでHTTPリクエストを送信します。

HTTPリクエストが作成した識別のハンドルのkey値を返します。

• string url 有効なHTTP/HTTPS URL.
• list parameters HTTP_*フラグ値の組み合わせで指定された、設定パラメータ

[ parameter1, value1, parameter2, value2, . . . parameterN, valueN]

• string body リクエストのコンテンツ。
フラグ 値の型 初期値 解説
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認証は無条件に受け入れられます。
llHTTPRequestを呼び出す過程でシミュレータにより送信されるヘッダ
ヘッダ 解説 データ例
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バイトが上限です。長い場合は切り捨てられるでしょう。
  • リクエストはオブジェクト単位を基準として抑制されます。(プリム単位ではありません)
    • リクエストは20秒毎に25リクエストを限界として抑制されます。これは一秒間に承認される回数、あるいは25回までふくれあがることをサポートするということです。
  • インターネットからテクスチャあるいは画像を呼び出すことには使えません。詳細は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はログにヘッダを保有可能で、 管理にカスタムログとログフォーマットを用いています。構文上の詳細についてはドキュメントを参照しましょう。

関連項目

イベント

•  http_response

関数

•  llEscapeURL
•  llUnescapeURL

項目

•  Simulator IP Addresses
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。
In other languages