Difference between revisions of "LlHTTPRequest/ja"
Asuka Neely (talk | contribs) (New page: {{LSL_Function/ja |func=llHTTPRequest |func_id=230 |func_energy=10.0 |func_sleep=0.0 |func_desc=指定したURL、リクエストの本体とパラメータをHTTPリクエストで送信...) |
m (corrected some odd translations) |
||
Line 4: | Line 4: | ||
|func_energy=10.0 | |func_energy=10.0 | ||
|func_sleep=0.0 | |func_sleep=0.0 | ||
|func_desc= | |func_desc=指定したURL、リクエストの本体とパラメータでHTTPリクエストを送信します。 | ||
|sort=HTTPRequest | |sort=HTTPRequest | ||
|func_footnot= | |func_footnot= | ||
Line 17: | Line 17: | ||
|spec | |spec | ||
|caveats= | |caveats= | ||
*'''url'''内にスペースがある場合、[[http_response/ja|http_response]] | *'''url'''内にスペースがある場合、[[http_response/ja|http_response]]のステータスコードは499になるでしょう。 | ||
* | *レスポンスボディは2048バイトが上限です。長い場合は切り捨てられるでしょう。 | ||
*リクエストはオブジェクト単位を基準として抑制されます。(プリム単位ではありません) | *リクエストはオブジェクト単位を基準として抑制されます。(プリム単位ではありません) | ||
**リクエストは20秒毎に25リクエストを限界として抑制されます。これは一秒間に承認される回数、あるいは25回までふくれあがることをサポートするということです。 | **リクエストは20秒毎に25リクエストを限界として抑制されます。これは一秒間に承認される回数、あるいは25回までふくれあがることをサポートするということです。 | ||
Line 24: | Line 24: | ||
*インターネットからテクスチャあるいは画像を呼び出すことには使えません。詳細は[[Web Textures]]をみましょう。. | *インターネットからテクスチャあるいは画像を呼び出すことには使えません。詳細は[[Web Textures]]をみましょう。. | ||
*アクセスしたサイトがL$トランザクションをレポートするLSLスクリプトに依存する場合、スクリプトはベータグリッド上で走っているかどうかを確認するために、X-SecondLife-Shardヘッダを確認すべきです。 | *アクセスしたサイトがL$トランザクションをレポートするLSLスクリプトに依存する場合、スクリプトはベータグリッド上で走っているかどうかを確認するために、X-SecondLife-Shardヘッダを確認すべきです。 | ||
* | * いくつかのサーバは、テキストかHTMLファイルのような承認できないメタデータファイルのPOSTの場合、405エラーを返すでしょう。いずれの環境でも確実に成功するGETメソッドを使うようにしましょう。 | ||
|examples=<lsl>key http_request_id; | |examples=<lsl>key http_request_id; | ||
Line 107: | Line 107: | ||
|also_articles={{LSL DefineRow||[[Simulator IP Addresses/ja|Simulator IP Addresses]]}} | |also_articles={{LSL DefineRow||[[Simulator IP Addresses/ja|Simulator IP Addresses]]}} | ||
|also_footer | |also_footer | ||
|notes=いずれかの理由で[[llHTTPRequest/ja|llHTTPRequest]]/[[http_response/ja|http_response]] | |notes=いずれかの理由で[[llHTTPRequest/ja|llHTTPRequest]]/[[http_response/ja|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リクエストの文字列を、解決するために付加しましょう。 | llHTTPRequestが用いられたとき、期待された結果を返すPCウェブブラウザでの同じURLにも関わらず、いずれかのウェブサーバはnullあるいは無意味な結果を返すことが分かるはずです。これはllHTTPRequestのUserAgent文字列が"Mozilla"を保有していないとして、いずれかのウェブサーバから、例えばシャウトキャストあるいはRSSクライアントとされてしまい、ウェブブラウザの代わりとして承認されないからです。対応するには、" HTTP/1.0\nUser-Agent: LSL Script (Mozilla Compatible)\n\n"かこれに類似したウェブブラウザ自身のそれらしきHTTPリクエストの文字列を、解決するために付加しましょう。 |
Revision as of 02:23, 2 December 2008
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
フラグ | 値の型 | 初期値 | 説明 | |
---|---|---|---|---|
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に依存します。 |
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を返します). |
ヘッダ | 説明 | データ例 |
---|---|---|
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メソッドを使うようにしましょう。
サンプル
<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>
注意点
いずれかの理由で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はログにヘッダを保有可能で、 管理にカスタムログとログフォーマットを用いています。構文上の詳細についてはドキュメントを参照しましょう。