LlHTTPRequest/ja

From Second Life Wiki
< LlHTTPRequest
Revision as of 01:23, 2 December 2008 by Fake Fitzgerald (talk | contribs) (corrected some odd translations)
Jump to navigation Jump to 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 を指定しなければなりません。HTML フォームをエミュレートできるようにするために、 application/x-www-form-urlencoded を使用しましょう。これによって、適切にエスケープ (llEscapeURL) されたフォーム var=value&var2=value2 の中の <name,value> ペアのシーケンス文字列に body を設定して、 Web フレームワークで自動的に解析できるようにすることができます。
HTTP_BODY_MAXLENGTH 2 integer 2048 UTF-8でエンコードされたHTTPボディの最大バイト長を設定します。最大値はVMに依存します。
  • Mono 最大: 16384
  • LSO 最大: 4096
HTTP_VERIFY_CERT 3 integer boolean TRUE TRUE の場合、サーバ SSL 認証は、HTTPS リクエストを作成する時点で標準的な認証機関のどれかを用いて認証できる状態になっていなければなりません。 FALSE の場合は、すべてのサーバ SSL 認証は無条件に受け入れられます。
HTTP_VERBOSE_THROTTLE 4 integer TRUE TRUEならサーバーに送られてくるリクエストの速度が制限値を超えた場合、 DEBUG_CHANNELでメッセージが叫ばれます。FALSEならエラーメッセージを出しません。(llHTTPRequestは黙ってNULL_KEYを返します).
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メソッドを使うようにしましょう。

サンプル

<lsl>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);
       }
   }

}</lsl>

PHPテストスクリプト例 <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; } } ?></php>

Apacheヘッダとグローバルメソッドの両方をキャプチャするラッパースクリプト例 <php> <?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); } ?> </php>

<lsl></lsl>

注意点

いずれかの理由で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

特記事項

Search JIRA for related Issues

Signature

function key llHTTPRequest( string url, list parameters, string body );
この翻訳は 原文 と比べて古いですか?間違いがありますか?読みにくいですか?みんなで 修正 していきましょう! (手順はこちら)
この項目はあなたにとって参考にならない項目ですか?もしかしたらLSL Wikiの関連した項目が参考になるかもしれません。