Ty(讨论 | 贡献)2020年11月27日 (五) 08:21的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
Template:Needs Translation/
函数名
|
Function: key llHTTPRequest( string url, list parameters, string body );
|
参数:
string url–A valid HTTP/HTTPS URL.
list parameters –configuration parameters, specified as HTTP_* flag-value pairs
[ parameter1, value1, parameter2, value2, parameterN, valueN]
string body–Contents of the request.
|
返回值:返回一个标识 http 请求的句柄(一个键)。
|
注意事项
|
*空格、控件字符和 url 中不允许的其他字符将导致运行时错误。
- 相应的 http 响应事件将在 prim 中的所有脚本中触发,而不仅仅是在请求 script.
- requests 必须在60秒后完成,否则响应将被丢弃,http 响应状态代码将为499。
- 默认情况下,响应主体被限制为2048字节,请参阅上面的 http _ body _ maxlength 以增加它。如果响应较长,则会被截断。
- 请求主体大小(例如 post 和 put 请求)仅受可用脚本内存的限制。在 mono 下,脚本最多可以容纳32k 字符,因为每个字符都是2字节,所以,脚本不能上传超过32k utf-8字符。
- 不能用于从互联网加载纹理或图像,更多信息请参见 web 纹理。
- 如果被访问的站点依赖 lsl 脚本来报告 l $事务,那么它必须检查 x-secondlife-shard 头部,看看脚本是否在 beta 版 grid 上运行。
- 如果你发送 post 到一个不能接受元数据的文件,比如文本或 html 文件,一些服务器会返回一个405错误。确保使用 get 方法确保在任何环境下都能成功。
- 当服务器的 HTTP状态码被提供给脚本时,重定向代码如302将导致重定向被自动且透明地遵循,只有当 http 方法是 get,并返回结果响应。如果 http 方法是其他类型的,那么 get 就会返回一个状态码为302的 http 响应,但是如果没有任何方法查看头部,你就不能知道你被重定向到了哪里,除非这也包含在正文中。
- 当使用 http-in 向脚本发出请求时,下面的应用是:
当向 cap url 追加查询字符串时,cap guid 和查询字符串令牌之
间必须有一个斜杠尾随.例如: “https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322?arg=gra ”会返回一个500 http 状态服务器错误代码,但是 “https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322/?arg=gra” 会成功。
- X-secondlife-owner-name 可能会返回“(loading...)”而不是所有者姓名(仍然为 true,2011年7月18日) 。
- 在大约0625 slt 上发出的请求可能会失败,状态代码为503,在响应正文中出现“ error: the requested url could not be retrieved”和“(111) connection refused”。这已经被证实是凯利的预期行为,由于每晚的主日志轮换。它确实在当时影响对象到对象 http,并且很可能在同一时间左右影响对象到/来自 web。服务中的中断相当短暂,而且精确的时间可能会有所不同,因为我会调整它们的夜间/maint 进程,或者由于服务器负载。
- 试图使用 http _ custom _ header 来设置它将导致运行时脚本错误。
|
示例
|
示例一
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) return;// exit if unknown
vector COLOR_BLUE = <0.0, 0.0, 1.0>;
float OPAQUE = 1.0;
llSetText(body, COLOR_BLUE, OPAQUE);
}
}
|