跳转至

服务端HTTP请求

@minecraft/server-net模块允许脚本API从基岩版专用服务端(BDS)发出HTTP请求,适用于服务端与外部系统集成的场景,如统计数据上报、身份验证等。

仅限BDS

@minecraft/server-net模块只能在基岩版专用服务端上运行,无法在普通Minecraft客户端(含自托管服务器)中使用。

配置清单文件

在行为包的manifest.json中声明依赖:

BP/manifest.json(依赖部分)
{
    "dependencies": [
        {
            "module_name": "@minecraft/server",
            "version": "2.0.0"
        },
        {
            "module_name": "@minecraft/server-net",
            "version": "1.0.0-beta"
        }
    ]
}

同时,还需要在BDSconfig/default/permissions.json中授权该行为包使用网络功能:

BDS/config/default/permissions.json
{
    "allowed_modules": [
        {
            "module_name": "@minecraft/server-net",
            "version": "1.0.0-beta"
        }
    ]
}

发送GET请求

使用http.get(url)发出GET请求,返回Promise<HttpResponse>

import { http, HttpRequest, HttpRequestMethod } from "@minecraft/server-net";
import { world } from "@minecraft/server";

// 简写GET请求
http.get("https://jsonplaceholder.typicode.com/todos/1")
    .then((response) => {
        world.sendMessage(`响应状态码:${response.status}`);
        world.sendMessage(`响应内容:${response.body}`);
    })
    .catch((error) => {
        console.error("请求失败:", error);
    });

发送POST请求

通过HttpRequest对象构建更复杂的请求:

import { http, HttpRequest, HttpRequestMethod, HttpHeader } from "@minecraft/server-net";
import { world } from "@minecraft/server";

const request = new HttpRequest("https://api.example.com/data");
request.method = HttpRequestMethod.Post;
request.headers = [
    new HttpHeader("Content-Type", "application/json"),
    new HttpHeader("Authorization", "Bearer YOUR_TOKEN"),
];
request.body = JSON.stringify({
    playerId: "some-player-id",
    event: "playerJoin",
});
request.timeout = 10;  // 超时秒数(默认10秒)

http.request(request)
    .then((response) => {
        console.log(`状态码:${response.status}`);
        const data = JSON.parse(response.body);
        world.sendMessage(`服务器回复:${data.message}`);
    })
    .catch((err) => {
        console.error("POST请求失败:", err);
    });

HttpResponse属性

HttpResponse对象包含以下属性:

status: number
HTTP状态码,如200、404等。
body: string
响应体文本内容。
headers: HttpHeader[]
响应头数组,每个元素有keyvalue属性。
request: HttpRequest
发起请求的原始HttpRequest对象。

注意事项

  • 每次脚本执行最多可以同时发起10个并发请求
  • 请求结果是异步的,不阻塞游戏主线程。
  • 请避免在响应回调中直接调用需要受限执行模式权限的API,改用system.run()包裹。