LlRequestURL
| 首页 | 函数 | 事件 | 类型 | 操作符 | 常数 | Flow Control | Script Library | Categorized Library | Tutorials |
| 函数名 |
|---|
| Function:key llRequestURL( ); |
| 参数: |
| 返回值:请求此脚本使用一个HTTP:// url。http_request event由请求的结果触发。
返回a handle (a key) ,用于识别http_request event中的请求结果。 |
| 注意事项 |
|---|
| http -in不在通常的http端口号上;它在http_request事件中提供的url包含正确的端口号。
你的脚本(和任何使用它的客户端)不应该“验证”提供的URL;特别地,不要假设它映射到任何特定的地址,或者在任何特定的域中。在“第二人生”进入云计算的过程中,这些将会发生变化,在“第二人生”进入云计算之后,这些变化可能会更加动态。 这个函数的使用是被限制的。虽然它没有强制休眠时间,但是在短时间内如果有太多的请求(5个左右),将会导致所有进一步的请求被拒绝,直到脚本停止url请求至少1秒。在每个请求之间使用0.6秒或更长的llSleep将防止您被throttled。 当(重新)启动一个区域时,所有 HTTP server URLs都会自动释放并失效。 使用CHANGED_REGION_START检测,这样就可以请求新的URL。 可用url的数量是有限的资源,也就是说,脚本只能有这么多开放的url。 当放弃一个URL时,用llReleaseURL释放它,以避免泄漏。重新设置脚本或删除prim也足以释放url。 与listeners不同,url的持久性跨越状态更改 |
| 示例 |
|---|
| 在HTTP Server URL Registration 中可以找到一个完整的示例,该示例展示了如何获取URL、向外部客户端注册该URL,并进行适当的回退和重试以联系外部服务。
该脚本在区域重启后请求一个新URL。 请参阅讨论页面,以了解为什么这个特定的脚本不需要使用llReleaseURL()。 string url;
key urlRequestId;
default
{
state_entry()
{
urlRequestId = llRequestURL();
}
on_rez(integer start_param)
{
llResetScript();
}
changed(integer change)
{
if (change & (CHANGED_OWNER | CHANGED_INVENTORY))
llResetScript();
if (change & (CHANGED_REGION | CHANGED_REGION_START | CHANGED_TELEPORT))
urlRequestId = llRequestURL();
}
http_request(key id, string method, string body)
{
if (id == urlRequestId)
{
if (method == URL_REQUEST_DENIED)
llOwnerSay("The following error occurred while attempting to get a free URL for this device:\n \n" + body);
else if (method == URL_REQUEST_GRANTED)
{
url = body;
llLoadURL(llGetOwner(), "Click to visit my URL!", url);
}
}
}
}
重要的是要记住,如果您请求另一个URL,旧的URL将不会被释放,它将保持活动状态。下面的脚本说明了这一点。 如果您可以在您的土地上使用所有url,请尝试以下代码。删除prim/脚本将释放之前分配的所有url。 //警告:
//
//此脚本仅用于概念验证(演示目的)。
//不要使用它,如果你没有sim卡所有者和/或
//地产管理器可以测试此脚本。
//这个脚本可能会阻止来自sim和与sim之间的HTTP通信。
/ /……关闭所有联网的供应商和/或类似的机器。
//
//此脚本分配所有可用的url。
//删除脚本和/或取消包含脚本的对象,
//将释放所有以前获取的url。
default
{
state_entry()
{
llRequestURL();
}
http_request(key id, string method, string body)
{
if (method == URL_REQUEST_DENIED)
llSetText("No free URLs!", <1.0, 0.0, 0.0>, 1.0);
else if (method == URL_REQUEST_GRANTED)
{
llSetText( (string)llGetFreeURLs() + " URLs left\n" + body, <1.0, 1.0, 1.0>, 1.0);
llRequestURL();
}
else if (method == "GET")
llHTTPResponse(id, 200, "Hello there!");
}
}
如您所见,此脚本将使用您土地上所有可用的url,因为它在请求新url之前不会删除旧url。
只需将旧URL存储在一个全局变量中,然后用[[llReleaseURL]]释放它。
|
| 相关函数 |
|---|
| llRequestSecureURL |
| 相关事件 |
|---|
| 无 |