# 下载浏览器内核

下载并安装浏览器内核。支持批量下载，每次请求最多 20 个内核。此操作的超时时间最长约 30 分钟，建议调用方超时设置大于 1805 秒。\n\n需要 MoreLogin 客户端版本 **2.61.1** 或更高。\n\n### 重复请求处理\n\n- 同一请求中出现多个相同浏览器类型和主版本的任务，只查询一次、只执行一次实际下载，但每个输入项都会返回结果。\n- 多个并发请求下载相同版本会加入正在进行的任务，不重复下载。\n- 如果已安装的完整版本与最新版本一致，状态返回 `already_installed`。\n- 如果已安装的是旧的小版本，将下载并更新到当前最新小版本。\n\n### 错误码参考\n\n| errorCode | 说明 |\n|---|---|\n| `INVALID_JSON` | JSON 格式错误 |\n| `INVALID_REQUEST` | 请求结构错误 |\n| `BATCH_LIMIT_EXCEEDED` | `Cores` 超过 20 条 |\n| `UNSUPPORTED_BROWSER_TYPE` | 不支持的浏览器类型 |\n| `INVALID_VERSION` | 版本格式错误 |\n| `METADATA_LOOKUP_FAILED` | 查询内核信息失败 |\n| `UNSUPPORTED_VERSION` | 内核版本不存在或当前平台不支持 |\n| `CLIENT_NOT_READY` | 客户端未准备完成 |\n| `SDK_NOT_READY` | SDK 未初始化 |\n| `INSUFFICIENT_DISK_SPACE` | 磁盘空间不足 |\n| `DOWNLOAD_FAILED` | 下载失败 |\n| `CHECKSUM_MISMATCH` | MD5 校验失败 |\n| `EXTRACTION_FAILED` | 解压或安装失败 |\n| `TIMEOUT` | 执行超时 |\n| `UNKNOWN` | 未知异常 |

Endpoint: POST /api/env/core/download
Version: 1.0.0

## Request fields (application/json):

  - `Cores` (array, required)
    待下载的内核列表（1–20 项）

  - `Cores.BrowserType` (integer, required)
    浏览器类型。`1`：Chrome，`2`：Firefox

  - `Cores.Version` (string, required)
    内核主版本号，例如 `"124"`、`"146"`

## Response 200 fields (application/json):

  - `code` (integer, required)
    响应代码。`0`：全部成功；`-1`：部分成功；`-2`：全部失败

  - `msg` (string)
    请求级错误消息；正常执行通常为 `null`

  - `data` (object, required)

  - `data.total` (integer, required)
    请求任务总数

  - `data.succeeded` (integer, required)
    成功数量（包括已安装）

  - `data.failed` (integer, required)
    失败数量

  - `data.results` (array, required)
    每个输入项对应的执行结果，顺序与请求一致

  - `data.results.index` (integer)
    对应 `Cores` 中的下标（从 0 开始）

  - `data.results.browserType` (integer)
    浏览器类型

  - `data.results.requestedVersion` (string)
    请求的主版本

  - `data.results.resolvedVersion` (string)
    实际解析到的完整版本，成功或已解析元数据时返回

  - `data.results.status` (string)
    任务状态：`installed`、`already_installed` 或 `failed`

  - `data.results.source` (string)
    下载来源：`downloaded`、`already_installed` 或 `joined_in_flight`

  - `data.results.errorCode` (string)
    任务失败时返回的稳定错误分类码

  - `data.results.serverCode` (integer)
    可选。平台服务返回的原始业务错误码

  - `data.results.msg` (string)
    展示消息，可能随客户端语言变化。不要用于程序化结果判断

