# API 文档 --- ## 通用 所有请求均为`POST`。 ### 鉴权 每次请求都必须在Header中带上`Authorization`。
`Authorization`请求头格式:`Basic `(basic auth)。 ``` Authorization: Basic ``` 例如: ``` Authorization: Basic WFpCOjEyNDg= ``` 在最初的Basic Authentication之后,服务端会分配一个`Authorization`的Cookie。
该Cookie可用于请求的后续鉴权,可以不再附带Authorization头。 --- ## 响应 所有响应均是JSON格式。
`code` 有三种结果,分别为`-1`,`0`和`1`,含义如下。 | code | meaning | |------|------------| | -1 | 参数缺失或无效 | | 0 | 成功 | | 1 | 失败,并输出错误信息 | ``` { "code": -1, "msg": "${i18n|COMMON.INVALID_PARAMETER}" } ``` ``` { "code": 0, "data": { ... } } ``` ``` { "code": 1, "msg": "${i18n|COMMON.DEVICE_NOT_EXIST}" } ``` --- ### 获取设备列表:`/device/list` 参数:**无** 设备的`id`是一串64位的字符串,每台设备独一无二,一般不会变化。
识别设备主要靠这个。下文中提到的设备ID也指的是这个。
每个device对象所对应的key,是它的本次连接的连接ID。
连接ID是随机、临时的,每次重连就会变化,不建议使用。 ``` { "code": 0, "data": { "1de601ca-7738-4b77-a081-57d3fc9c4482": { "id": "1a23e7660cde01285ca241d5f5d3cf2c5bc39e02c1df7a30b58fbde2938b0375", "os": "windows", "arch": "amd64", "lan": "192.168.1.1", "wan": "1.1.1.1", "mac": "00:00:00:00:00:00", "net": { "sent": 0, "recv": 60 }, "cpu": { "model": "Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz", "usage": 8.658854166666668, "cores": { "logical": 8, "physical": 4 } }, "ram": { "total": 8432967680, "used": 5109829632, "usage": 60.593492420452385 }, "disk": { "total": 1373932810240, "used": 185675567104, "usage": 13.51416646579435 }, "uptime": 1015, "latency": 10, "hostname": "LOCALHOST", "username": "EXAMPLE" } } } ``` --- ### 基础操作:`/device/:act` 参数:`:act` 以及 `device`(设备ID) 参数 `:act` 可以是这些: `lock`,`logoff`,`hibernate`,`suspend`,`restart`,`shutdown` 以及 `offline`。 例如,如果你调用 `/device/restart`,那对应设备就会重启。 ``` { "code": 0 } ``` --- ### 执行命令:`/device/exec` 参数:`cmd`、`args`以及`device`(设备ID) 示例: ```http request POST http://localhost:8000/api/device/exec HTTP/1.1 Host: localhost:8000 Content-Length: 116 Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.47 Origin: http://localhost:8000 Referer: http://localhost:8000/ cmd=taskkill&args=%2Ff%20%2Fim%20regedit.exe&device=bc7e49f8f794f80ffb0032a4ba516c86d76041bf2023e1be6c5dda3b1ee0cf4c ``` ``` { "code": 0 } ``` --- ### 获取截屏:`/device/screenshot/get` 参数:`device`(设备ID) 如果截屏获取成功,则会直接以图片的形式输出。
如果截屏失败,如下响应会被输出(错误信息不唯一)。 ``` { "code": 1, "msg": "${i18n|DESKTOP.NO_DISPLAY_FOUND}" } ``` --- ### 读取设备上的文件:`/device/file/get` 参数:`files`(文件数组) 以及 `device`(设备ID) 如果文件存在且可访问,则文件会直接输出。
否则,会给出错误原因。
如果`files`为文件数组或者目录,则会输出一个zip文件。 ``` { "code": 1, "msg": "${i18n|EXPLORER.FILE_OR_DIR_NOT_EXIST}" } ``` --- ### 删除设备上的文件:`/device/file/remove` 参数:`files`(文件数组) 以及 `device`(设备ID) 如果文件存在且被成功删除,则`code`为`0`。 ``` { "code": 0 } ``` ``` { "code": 1, "msg": "${i18n|EXPLORER.FILE_OR_DIR_NOT_EXIST}" } ``` --- ### 上传文件到目录:`/device/file/upload` **GET**参数:`file`(文件名)、`path`(路径)和`device`(设备ID) 文件内容需要作为**请求体body**发送。
**请求体body**中的任何内容都会被写到指定地文件中。
如果存在同名文件,则会被**覆盖**! 示例: ```http request POST http://localhost:8000/api/device/file/upload?path=D%3A%5C&file=Test.txt&device=bc7e49f8f794f80ffb0032a4ba516c86d76041bf2023e1be6c5dda3b1ee0cf4c HTTP/1.1 Host: localhost:8000 Content-Length: 12 Content-Type: application/octet-stream User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.47 Origin: http://localhost:8000 Referer: http://localhost:8000/ Hello World. ``` 如果文件上传成功,则`code`为`0`。
文件`D:\Test.txt`会写入:`Hello World.`。 ``` { "code": 0 } ``` ``` { "code": 1, "msg": "${i18n|EXPLORER.FILE_OR_DIR_NOT_EXIST}" } ``` --- ### 列举设备上的文件和目录:`/device/file/list` 参数:`path`(父目录路径) 以及 `device`(设备ID) 如果`path`为空,windows下会给出磁盘列表。
其它系统会默认输出`/`目录下的文件和目录。 `type`有三种结果:`0`代表文件,`1`代表目录,`2`代表磁盘(windows)。 ``` { "code": 0, "data": { "files": [ { "name": "home", "size": 4096, "time": 1629627926, "type": 1 }, { "name": "Spark", "size": 8192, "time": 1629627926, "type": 0 } ] } } ``` ``` { "code": 1, "msg": "${i18n|EXPLORER.FILE_OR_DIR_NOT_EXIST}" } ``` --- ### 获取进程列表`/device/process/list` 参数:`device`(设备ID) ``` { "code": 0, "data": { "processes": [ { "name": "[System Process]", "pid": 0 }, { "name": "System", "pid": 4 }, { "name": "Registry", "pid": 124 }, { "name": "smss.exe", "pid": 392 }, { "name": "winlogon.exe", "pid": 456 } ] } } ``` --- ### 结束进程:`/device/process/kill` 参数:`pid` 以及 `device`(设备ID) ``` { "code": 0 } ``` ``` { "code": 1, "msg": "${i18n|COMMON.DEVICE_NOT_EXIST}" } ```