ms-vite-plugin 1.1.2 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build.js +6 -0
- package/dist/cli.js +91 -1
- package/dist/mcp/device-config.d.ts +55 -0
- package/dist/mcp/device-config.js +183 -0
- package/dist/mcp/docs-service.d.ts +65 -0
- package/dist/mcp/docs-service.js +168 -0
- package/dist/mcp/project.d.ts +16 -0
- package/dist/mcp/project.js +74 -0
- package/dist/mcp/tools.d.ts +18 -0
- package/dist/mcp/tools.js +825 -0
- package/dist/mcp/types.d.ts +32 -0
- package/dist/mcp/types.js +11 -0
- package/dist/mcp-server.d.ts +2 -0
- package/dist/mcp-server.js +86 -0
- package/dist/project.d.ts +89 -0
- package/dist/project.js +306 -0
- package/dist/version.d.ts +12 -0
- package/dist/version.js +63 -0
- package/docs/api/action.md +922 -0
- package/docs/api/appleocr.md +229 -0
- package/docs/api/config.md +122 -0
- package/docs/api/cryptoUtils.md +232 -0
- package/docs/api/device.md +374 -0
- package/docs/api/file.md +516 -0
- package/docs/api/global.md +617 -0
- package/docs/api/hid.md +1032 -0
- package/docs/api/hotUpdate.md +166 -0
- package/docs/api/http.md +548 -0
- package/docs/api/image.md +907 -0
- package/docs/api/ime.md +290 -0
- package/docs/api/logger.md +324 -0
- package/docs/api/media.md +248 -0
- package/docs/api/mysql.md +441 -0
- package/docs/api/netCard.md +200 -0
- package/docs/api/node.md +353 -0
- package/docs/api/paddleocr.md +246 -0
- package/docs/api/pip.md +242 -0
- package/docs/api/system.md +572 -0
- package/docs/api/thread.md +269 -0
- package/docs/api/tomatoocr.md +425 -0
- package/docs/api/tts.md +334 -0
- package/docs/api/ui.md +947 -0
- package/docs/api/utils.md +265 -0
- package/docs/api/yolo.md +310 -0
- package/docs/apicn/action.md +919 -0
- package/docs/apicn/appleocr.md +233 -0
- package/docs/apicn/config.md +120 -0
- package/docs/apicn/device.md +385 -0
- package/docs/apicn/file.md +511 -0
- package/docs/apicn/global.md +613 -0
- package/docs/apicn/hid.md +1033 -0
- package/docs/apicn/hotUpdate.md +170 -0
- package/docs/apicn/http.md +672 -0
- package/docs/apicn/image.md +924 -0
- package/docs/apicn/ime.md +290 -0
- package/docs/apicn/logger.md +332 -0
- package/docs/apicn/media.md +252 -0
- package/docs/apicn/mysql.md +445 -0
- package/docs/apicn/netCard.md +200 -0
- package/docs/apicn/node.md +362 -0
- package/docs/apicn/paddleocr.md +255 -0
- package/docs/apicn/pip.md +242 -0
- package/docs/apicn/system.md +575 -0
- package/docs/apicn/thread.md +269 -0
- package/docs/apicn/tts.md +338 -0
- package/docs/apicn/ui.md +933 -0
- package/docs/apicn/utils.md +265 -0
- package/docs/apicn/yolo.md +314 -0
- package/docs/apipython/action.md +901 -0
- package/docs/apipython/appleocr.md +226 -0
- package/docs/apipython/config.md +126 -0
- package/docs/apipython/cryptoUtils.md +246 -0
- package/docs/apipython/device.md +365 -0
- package/docs/apipython/file.md +476 -0
- package/docs/apipython/g.md +154 -0
- package/docs/apipython/hid.md +1059 -0
- package/docs/apipython/hotUpdate.md +154 -0
- package/docs/apipython/image.md +938 -0
- package/docs/apipython/ime.md +306 -0
- package/docs/apipython/logger.md +330 -0
- package/docs/apipython/media.md +221 -0
- package/docs/apipython/mysql.md +432 -0
- package/docs/apipython/netCard.md +219 -0
- package/docs/apipython/node.md +331 -0
- package/docs/apipython/overview.md +66 -0
- package/docs/apipython/paddleocr.md +211 -0
- package/docs/apipython/pip.md +231 -0
- package/docs/apipython/system.md +458 -0
- package/docs/apipython/tomatoocr.md +444 -0
- package/docs/apipython/tts.md +331 -0
- package/docs/apipython/ui.md +949 -0
- package/docs/apipython/utils.md +284 -0
- package/docs/apipython/yolo.md +281 -0
- package/package.json +8 -4
|
@@ -0,0 +1,672 @@
|
|
|
1
|
+
# HTTP 模块 ($HTTP)
|
|
2
|
+
|
|
3
|
+
HTTP 模块提供了完整的网络请求功能,包括 HTTP 请求、文件下载、WebSocket 连接等。
|
|
4
|
+
|
|
5
|
+
## 通用 HTTP 请求
|
|
6
|
+
|
|
7
|
+
### 发送请求 - 发送通用 HTTP 请求,支持所有 HTTP 方法和完整的配置选项。
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
function 发送请求(params: {
|
|
11
|
+
/**
|
|
12
|
+
* 请求地址
|
|
13
|
+
*/
|
|
14
|
+
url: 字符串;
|
|
15
|
+
/**
|
|
16
|
+
* 请求超时时间
|
|
17
|
+
*/
|
|
18
|
+
timeout?: 数字;
|
|
19
|
+
/**
|
|
20
|
+
* 请求方法 GET POST PUT DELETE PATCH HEAD OPTIONS
|
|
21
|
+
*/
|
|
22
|
+
method?: 字符串;
|
|
23
|
+
/**
|
|
24
|
+
* 代理服务器
|
|
25
|
+
*/
|
|
26
|
+
proxy?: {
|
|
27
|
+
/**
|
|
28
|
+
* 代理服务器地址
|
|
29
|
+
*/
|
|
30
|
+
host: 字符串;
|
|
31
|
+
/**
|
|
32
|
+
* 代理服务器端口
|
|
33
|
+
*/
|
|
34
|
+
port: 数字;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* 是否跟随重定向
|
|
38
|
+
*/
|
|
39
|
+
followRedirects?: 布尔值;
|
|
40
|
+
/**
|
|
41
|
+
* 请求体 仅在POST方法下有效 json 需要进行JSON.stringify
|
|
42
|
+
*/
|
|
43
|
+
requestBody?: 字符串;
|
|
44
|
+
/**
|
|
45
|
+
* 请求头
|
|
46
|
+
*/
|
|
47
|
+
userAgent?: 字符串;
|
|
48
|
+
/**
|
|
49
|
+
* 是否忽略内容类型
|
|
50
|
+
*/
|
|
51
|
+
ignoreContentType?: 布尔值;
|
|
52
|
+
/**
|
|
53
|
+
* 是否忽略HTTP错误
|
|
54
|
+
*/
|
|
55
|
+
ignoreHttpErrors?: 布尔值;
|
|
56
|
+
/**
|
|
57
|
+
* 最大响应体大小 默认 10MB
|
|
58
|
+
*/
|
|
59
|
+
maxBodySize?: 数字;
|
|
60
|
+
/**
|
|
61
|
+
* 引用来源
|
|
62
|
+
*/
|
|
63
|
+
referrer?: 字符串;
|
|
64
|
+
/**
|
|
65
|
+
* 请求头
|
|
66
|
+
*/
|
|
67
|
+
header?: 字典<字符串>;
|
|
68
|
+
/**
|
|
69
|
+
* Cookie
|
|
70
|
+
*/
|
|
71
|
+
cookie?: 字典<字符串>;
|
|
72
|
+
/**
|
|
73
|
+
* 请求参数
|
|
74
|
+
*/
|
|
75
|
+
data?: 字典<任意类型>;
|
|
76
|
+
/**
|
|
77
|
+
* 请求文件
|
|
78
|
+
*/
|
|
79
|
+
file?: 字典<字符串>;
|
|
80
|
+
/**
|
|
81
|
+
* 响应字符集
|
|
82
|
+
*/
|
|
83
|
+
responseCharset?: 字符串;
|
|
84
|
+
}): {
|
|
85
|
+
/**
|
|
86
|
+
* 响应头
|
|
87
|
+
*/
|
|
88
|
+
header: 字典<字符串>;
|
|
89
|
+
/**
|
|
90
|
+
* 响应Cookie
|
|
91
|
+
*/
|
|
92
|
+
cookie: 字典<字符串>;
|
|
93
|
+
/**
|
|
94
|
+
* 响应状态码
|
|
95
|
+
*/
|
|
96
|
+
statusCode: 数字;
|
|
97
|
+
/**
|
|
98
|
+
* 响应状态消息
|
|
99
|
+
*/
|
|
100
|
+
statusMessage: 字符串;
|
|
101
|
+
/**
|
|
102
|
+
* 响应字符集
|
|
103
|
+
*/
|
|
104
|
+
charset: 字符串;
|
|
105
|
+
/**
|
|
106
|
+
* 响应内容类型
|
|
107
|
+
*/
|
|
108
|
+
contentType: 字符串;
|
|
109
|
+
/**
|
|
110
|
+
* 响应体
|
|
111
|
+
*/
|
|
112
|
+
body: 字符串;
|
|
113
|
+
};
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**参数:**
|
|
117
|
+
|
|
118
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
119
|
+
| ------------------- | -------------- | -------- | -------- | --------------------------- |
|
|
120
|
+
| `url` | 字符串 | 是 | - | 请求地址 |
|
|
121
|
+
| `timeout` | 数字 | 否 | 10000 | 请求超时时间(毫秒) |
|
|
122
|
+
| `method` | 字符串 | 否 | GET | 请求方法(GET、POST 等) |
|
|
123
|
+
| `proxy` | 对象 | 否 | - | 代理服务器配置 |
|
|
124
|
+
| `followRedirects` | 布尔值 | 否 | true | 是否跟随重定向 |
|
|
125
|
+
| `requestBody` | 字符串 | 否 | - | 请求体(POST 等方法使用) |
|
|
126
|
+
| `userAgent` | 字符串 | 否 | - | 用户代理字符串 |
|
|
127
|
+
| `ignoreContentType` | 布尔值 | 否 | false | 是否忽略内容类型 |
|
|
128
|
+
| `ignoreHttpErrors` | 布尔值 | 否 | false | 是否忽略 HTTP 错误 |
|
|
129
|
+
| `maxBodySize` | 数字 | 否 | 10485760 | 最大响应体大小(默认 10MB) |
|
|
130
|
+
| `referrer` | 字符串 | 否 | - | 引用来源 |
|
|
131
|
+
| `header` | 字典<字符串> | 否 | - | 请求头 |
|
|
132
|
+
| `cookie` | 字典<字符串> | 否 | - | Cookie |
|
|
133
|
+
| `data` | 字典<任意类型> | 否 | - | 请求参数 |
|
|
134
|
+
| `file` | 字典<字符串> | 否 | - | 请求文件 |
|
|
135
|
+
| `responseCharset` | 字符串 | 否 | - | 响应字符集 |
|
|
136
|
+
|
|
137
|
+
**返回值:**
|
|
138
|
+
|
|
139
|
+
| 字段名 | 类型 | 描述 |
|
|
140
|
+
| --------------- | ------------ | ------------- |
|
|
141
|
+
| `header` | 字典<字符串> | 响应头 |
|
|
142
|
+
| `cookie` | 字典<字符串> | 响应 Cookie |
|
|
143
|
+
| `statusCode` | 数字 | HTTP 状态码 |
|
|
144
|
+
| `statusMessage` | 字符串 | HTTP 状态消息 |
|
|
145
|
+
| `charset` | 字符串 | 响应字符集 |
|
|
146
|
+
| `contentType` | 字符串 | 响应内容类型 |
|
|
147
|
+
| `body` | 字符串 | 响应体内容 |
|
|
148
|
+
|
|
149
|
+
**示例:**
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
// GET 请求
|
|
153
|
+
const 数据响应 = $HTTP.发送请求({
|
|
154
|
+
url: "https://api.example.com/users",
|
|
155
|
+
method: "GET",
|
|
156
|
+
timeout: 5000,
|
|
157
|
+
header: {
|
|
158
|
+
Authorization: "Bearer token123",
|
|
159
|
+
Accept: "application/json",
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
$打印信息日志(`状态码: ${数据响应.statusCode}`);
|
|
164
|
+
$打印信息日志(`响应体: ${数据响应.body}`);
|
|
165
|
+
|
|
166
|
+
// POST 请求发送 JSON 数据
|
|
167
|
+
const 提交数据响应 = $HTTP.发送请求({
|
|
168
|
+
url: "https://api.example.com/users",
|
|
169
|
+
method: "POST",
|
|
170
|
+
header: {
|
|
171
|
+
"Content-Type": "application/json",
|
|
172
|
+
Authorization: "Bearer token123",
|
|
173
|
+
},
|
|
174
|
+
requestBody: JSON.stringify({
|
|
175
|
+
name: "张三",
|
|
176
|
+
email: "zhangsan@example.com",
|
|
177
|
+
}),
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
$打印信息日志(`状态码: ${提交数据响应.statusCode}`);
|
|
181
|
+
$打印信息日志(`响应体: ${提交数据响应.body}`);
|
|
182
|
+
|
|
183
|
+
// 使用代理
|
|
184
|
+
const 代理数据响应 = $HTTP.发送请求({
|
|
185
|
+
url: "https://api.example.com/data",
|
|
186
|
+
method: "GET",
|
|
187
|
+
proxy: {
|
|
188
|
+
host: "proxy.example.com",
|
|
189
|
+
port: 8080,
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
$打印信息日志(`状态码: ${代理数据响应.statusCode}`);
|
|
194
|
+
$打印信息日志(`响应体: ${代理数据响应.body}`);
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## 简化 HTTP 方法
|
|
198
|
+
|
|
199
|
+
### 发送 GET 请求 - 发送 GET 请求的简化方法。
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
function 发送GET请求(
|
|
203
|
+
请求地址: 字符串,
|
|
204
|
+
请求参数?: 字典<字符串>,
|
|
205
|
+
超时时间?: 数字,
|
|
206
|
+
请求头?: 字典<字符串>,
|
|
207
|
+
): 字符串 | null;
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**参数:**
|
|
211
|
+
|
|
212
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
213
|
+
| ---------- | ------------ | -------- | ------ | ---------------- |
|
|
214
|
+
| `请求地址` | 字符串 | 是 | - | 请求地址 |
|
|
215
|
+
| `请求参数` | 字典<字符串> | 否 | - | URL 查询参数 |
|
|
216
|
+
| `超时时间` | 数字 | 否 | 10000 | 超时时间(毫秒) |
|
|
217
|
+
| `请求头` | 字典<字符串> | 否 | - | 请求头 |
|
|
218
|
+
|
|
219
|
+
**返回值:**
|
|
220
|
+
|
|
221
|
+
| 类型 | 描述 |
|
|
222
|
+
| -------- | ---------- |
|
|
223
|
+
| `字符串` | 响应体内容 |
|
|
224
|
+
|
|
225
|
+
**示例:**
|
|
226
|
+
|
|
227
|
+
```typescript
|
|
228
|
+
// 简单 GET 请求
|
|
229
|
+
const html = $HTTP.发送GET请求("https://www.example.com");
|
|
230
|
+
$打印信息日志(html);
|
|
231
|
+
|
|
232
|
+
// 带参数的 GET 请求
|
|
233
|
+
const 搜索响应 = $HTTP.发送GET请求(
|
|
234
|
+
"https://api.example.com/search",
|
|
235
|
+
{ q: "快点JS", limit: "10" },
|
|
236
|
+
5000,
|
|
237
|
+
{ "User-Agent": "快点JS/1.0" },
|
|
238
|
+
);
|
|
239
|
+
|
|
240
|
+
// 解析 JSON 响应
|
|
241
|
+
try {
|
|
242
|
+
const data = JSON.parse(搜索响应);
|
|
243
|
+
$打印信息日志(`搜索结果: ${JSON.stringify(data)}`);
|
|
244
|
+
} catch (error) {
|
|
245
|
+
$打印错误日志(`JSON 解析失败: ${error}`);
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### 发送 POST 请求 - 发送 POST 请求的简化方法。
|
|
250
|
+
|
|
251
|
+
```typescript
|
|
252
|
+
function 发送POST请求(
|
|
253
|
+
请求地址: 字符串,
|
|
254
|
+
请求参数?: 字典<字符串>,
|
|
255
|
+
请求文件?: 字典<字符串>,
|
|
256
|
+
超时时间?: 数字,
|
|
257
|
+
请求头?: 字典<字符串>,
|
|
258
|
+
): 字符串 | null;
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
**参数:**
|
|
262
|
+
|
|
263
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
264
|
+
| ---------- | ------------ | -------- | ------ | ---------------- |
|
|
265
|
+
| `请求地址` | 字符串 | 是 | - | 请求地址 |
|
|
266
|
+
| `请求参数` | 字典<字符串> | 否 | - | 表单参数 |
|
|
267
|
+
| `请求文件` | 字典<字符串> | 否 | - | 文件参数 |
|
|
268
|
+
| `超时时间` | 数字 | 否 | 10000 | 超时时间(毫秒) |
|
|
269
|
+
| `请求头` | 字典<字符串> | 否 | - | 请求头 |
|
|
270
|
+
|
|
271
|
+
**返回值:**
|
|
272
|
+
|
|
273
|
+
| 类型 | 描述 |
|
|
274
|
+
| -------- | ---------- |
|
|
275
|
+
| `字符串` | 响应体内容 |
|
|
276
|
+
|
|
277
|
+
**示例:**
|
|
278
|
+
|
|
279
|
+
```typescript
|
|
280
|
+
// 发送表单数据
|
|
281
|
+
const 提交响应 = $HTTP.发送POST请求("https://api.example.com/submit", {
|
|
282
|
+
username: "admin",
|
|
283
|
+
password: "123456",
|
|
284
|
+
action: "login",
|
|
285
|
+
});
|
|
286
|
+
|
|
287
|
+
// 上传文件
|
|
288
|
+
const 上传响应 = $HTTP.发送POST请求(
|
|
289
|
+
"https://api.example.com/upload",
|
|
290
|
+
{ description: "测试文件" },
|
|
291
|
+
{ file: "/path/to/file.txt" },
|
|
292
|
+
10000,
|
|
293
|
+
);
|
|
294
|
+
|
|
295
|
+
$打印信息日志(`上传结果: ${JSON.stringify(上传响应)}`);
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### 发送 JSON 请求 - 发送 JSON 数据的 POST 请求。
|
|
299
|
+
|
|
300
|
+
```typescript
|
|
301
|
+
function 发送JSON请求(
|
|
302
|
+
请求地址: 字符串,
|
|
303
|
+
请求JSON数据?: 字典<任意类型>,
|
|
304
|
+
超时时间?: 数字,
|
|
305
|
+
请求头?: 字典<字符串>,
|
|
306
|
+
): 字符串 | null;
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
**参数:**
|
|
310
|
+
|
|
311
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
312
|
+
| -------------- | -------------- | -------- | ------ | ---------------- |
|
|
313
|
+
| `请求地址` | 字符串 | 是 | - | 请求地址 |
|
|
314
|
+
| `请求JSON数据` | 字典<任意类型> | 否 | - | JSON 数据 |
|
|
315
|
+
| `超时时间` | 数字 | 否 | 10000 | 超时时间(毫秒) |
|
|
316
|
+
| `请求头` | 字典<字符串> | 否 | - | 请求头 |
|
|
317
|
+
|
|
318
|
+
**返回值:**
|
|
319
|
+
|
|
320
|
+
| 类型 | 描述 |
|
|
321
|
+
| -------- | ---------- |
|
|
322
|
+
| `字符串` | 响应体内容 |
|
|
323
|
+
|
|
324
|
+
**示例:**
|
|
325
|
+
|
|
326
|
+
```typescript
|
|
327
|
+
// 发送 JSON 数据
|
|
328
|
+
const 数据响应 = $HTTP.发送JSON请求(
|
|
329
|
+
"https://api.example.com/api/users",
|
|
330
|
+
{
|
|
331
|
+
name: "快点JS",
|
|
332
|
+
version: "1.0.0",
|
|
333
|
+
platform: "iOS",
|
|
334
|
+
},
|
|
335
|
+
5000,
|
|
336
|
+
{ Authorization: "Bearer token123" },
|
|
337
|
+
);
|
|
338
|
+
|
|
339
|
+
// 解析响应
|
|
340
|
+
try {
|
|
341
|
+
const result = JSON.parse(数据响应);
|
|
342
|
+
if (result.success) {
|
|
343
|
+
$打印信息日志(`数据创建成功: ${JSON.stringify(result.data)}`);
|
|
344
|
+
} else {
|
|
345
|
+
$打印错误日志(`数据创建失败: ${result.message}`);
|
|
346
|
+
}
|
|
347
|
+
} catch (error) {
|
|
348
|
+
$打印错误日志(`数据响应解析失败: ${error}`);
|
|
349
|
+
}
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
## 文件下载
|
|
353
|
+
|
|
354
|
+
### 下载文件 - 下载文件到本地,支持断点续传。
|
|
355
|
+
|
|
356
|
+
```typescript
|
|
357
|
+
function 下载文件(
|
|
358
|
+
请求地址: 字符串,
|
|
359
|
+
保存的文件路径: 字符串,
|
|
360
|
+
超时时间?: 数字,
|
|
361
|
+
请求头?: 字典<字符串>,
|
|
362
|
+
): 布尔值;
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
**参数:**
|
|
366
|
+
|
|
367
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
368
|
+
| ---------------- | ------------ | -------- | ------ | -------------------- |
|
|
369
|
+
| `请求地址` | 字符串 | 是 | - | 文件下载地址 |
|
|
370
|
+
| `保存的文件路径` | 字符串 | 是 | - | 本地保存路径 |
|
|
371
|
+
| `超时时间` | 数字 | 否 | 10000 | 下载超时时间(毫秒) |
|
|
372
|
+
| `请求头` | 字典<字符串> | 否 | - | 请求头 |
|
|
373
|
+
|
|
374
|
+
**返回值:**
|
|
375
|
+
|
|
376
|
+
| 类型 | 描述 |
|
|
377
|
+
| -------- | ------------ |
|
|
378
|
+
| `布尔值` | 下载是否成功 |
|
|
379
|
+
|
|
380
|
+
**示例:**
|
|
381
|
+
|
|
382
|
+
```typescript
|
|
383
|
+
const 文档目录 = $文件.获取内部目录("documents");
|
|
384
|
+
|
|
385
|
+
// 下载文件
|
|
386
|
+
const 下载成功 = $HTTP.下载文件(
|
|
387
|
+
"https://example.com/files/document.pdf",
|
|
388
|
+
`${文档目录}/document.pdf`,
|
|
389
|
+
30000, // 30秒超时
|
|
390
|
+
{ "User-Agent": "快点JS Downloader" },
|
|
391
|
+
);
|
|
392
|
+
|
|
393
|
+
if (下载成功) {
|
|
394
|
+
$打印信息日志("文件下载成功");
|
|
395
|
+
} else {
|
|
396
|
+
$打印错误日志("文件下载失败");
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
// 下载大文件
|
|
400
|
+
function 下载大文件(请求地址, 保存的文件名称) {
|
|
401
|
+
$打印信息日志(`开始下载: ${保存的文件名称}`);
|
|
402
|
+
const 文档目录 = $文件.获取内部目录("documents");
|
|
403
|
+
const 下载成功 = $HTTP.下载文件(
|
|
404
|
+
请求地址,
|
|
405
|
+
`${文档目录}/${保存的文件名称}`,
|
|
406
|
+
60000, // 1分钟超时
|
|
407
|
+
);
|
|
408
|
+
|
|
409
|
+
if (下载成功) {
|
|
410
|
+
$打印信息日志(`下载完成: ${保存的文件名称}`);
|
|
411
|
+
return true;
|
|
412
|
+
} else {
|
|
413
|
+
$打印错误日志(`下载失败: ${保存的文件名称}`);
|
|
414
|
+
return false;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// 批量下载
|
|
419
|
+
const 下载列表 = [
|
|
420
|
+
{ url: "https://example.com/file1.zip", name: "file1.zip" },
|
|
421
|
+
{ url: "https://example.com/file2.zip", name: "file2.zip" },
|
|
422
|
+
];
|
|
423
|
+
|
|
424
|
+
下载列表.forEach((file) => {
|
|
425
|
+
下载大文件(file.url, file.name);
|
|
426
|
+
});
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
## WebSocket 连接
|
|
430
|
+
|
|
431
|
+
### 创建 WebSocket 连接 - 创建 WebSocket 连接。
|
|
432
|
+
|
|
433
|
+
```typescript
|
|
434
|
+
function 创建WebSocket连接(
|
|
435
|
+
连接地址: 字符串,
|
|
436
|
+
连接头?: 字典<字符串>,
|
|
437
|
+
): WebSocket连接;
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
**参数:**
|
|
441
|
+
|
|
442
|
+
| 参数名 | 类型 | 是否必填 | 默认值 | 描述 |
|
|
443
|
+
| ---------- | ------------ | -------- | ------ | -------------------- |
|
|
444
|
+
| `连接地址` | 字符串 | 是 | - | WebSocket 服务器地址 |
|
|
445
|
+
| `连接头` | 字典<字符串> | 否 | - | 连接头 |
|
|
446
|
+
|
|
447
|
+
**返回值:**
|
|
448
|
+
|
|
449
|
+
| 类型 | 描述 |
|
|
450
|
+
| --------------- | ------------------ |
|
|
451
|
+
| `WebSocket连接` | WebSocket 连接对象 |
|
|
452
|
+
|
|
453
|
+
### WebSocket 接口方法
|
|
454
|
+
|
|
455
|
+
#### 连接管理
|
|
456
|
+
|
|
457
|
+
```typescript
|
|
458
|
+
/**
|
|
459
|
+
* 连接WebSocket服务器
|
|
460
|
+
*/
|
|
461
|
+
连接(): 无返回值;
|
|
462
|
+
/**
|
|
463
|
+
* 关闭WebSocket连接
|
|
464
|
+
*/
|
|
465
|
+
关闭(): 无返回值;
|
|
466
|
+
/**
|
|
467
|
+
* 重置WebSocket连接
|
|
468
|
+
* @returns 重置是否成功
|
|
469
|
+
*/
|
|
470
|
+
重置(): 布尔值;
|
|
471
|
+
/**
|
|
472
|
+
* 获取WebSocket是否已关闭
|
|
473
|
+
* @returns 是否已关闭
|
|
474
|
+
*/
|
|
475
|
+
已关闭(): 布尔值;
|
|
476
|
+
/**
|
|
477
|
+
* 获取WebSocket是否已连接
|
|
478
|
+
* @returns 是否已连接
|
|
479
|
+
*/
|
|
480
|
+
已连接(): 布尔值;
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
#### 消息发送
|
|
484
|
+
|
|
485
|
+
```typescript
|
|
486
|
+
/**
|
|
487
|
+
* 发送文本消息
|
|
488
|
+
* @param 数据 文本消息内容
|
|
489
|
+
*/
|
|
490
|
+
发送文本(数据: 字符串): 无返回值;
|
|
491
|
+
/**
|
|
492
|
+
* 发送二进制消息
|
|
493
|
+
* @param 数据 二进制消息内容
|
|
494
|
+
*/
|
|
495
|
+
发送二进制(数据: ArrayBuffer): 无返回值;
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
#### 事件回调
|
|
499
|
+
|
|
500
|
+
```typescript
|
|
501
|
+
// 设置连接打开回调
|
|
502
|
+
监听打开回调(回调: () => 无返回值): 无返回值;
|
|
503
|
+
/**
|
|
504
|
+
* 监听连接关闭回调
|
|
505
|
+
* @param 回调 连接关闭时调用的回调函数
|
|
506
|
+
*/
|
|
507
|
+
监听关闭回调(回调: () => 无返回值): 无返回值;
|
|
508
|
+
/**
|
|
509
|
+
* 监听文本消息回调
|
|
510
|
+
* @param 回调 收到文本消息时调用的回调函数
|
|
511
|
+
*/
|
|
512
|
+
监听文本消息回调(回调: (数据: 字符串) => 无返回值): 无返回值;
|
|
513
|
+
/**
|
|
514
|
+
* 监听二进制消息回调
|
|
515
|
+
* @param 回调 收到二进制消息时调用的回调函数
|
|
516
|
+
*/
|
|
517
|
+
监听二进制消息回调(回调: (数据: ArrayBuffer) => 无返回值): 无返回值;
|
|
518
|
+
/**
|
|
519
|
+
* 监听错误回调
|
|
520
|
+
* @param 回调 发生错误时调用的回调函数
|
|
521
|
+
*/
|
|
522
|
+
监听异常回调(回调: (错误: 字符串) => 无返回值): 无返回值;
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
#### 配置选项
|
|
526
|
+
|
|
527
|
+
```typescript
|
|
528
|
+
/**
|
|
529
|
+
* 设置连接超时时间
|
|
530
|
+
* @param 超时时间 连接超时时间(毫秒)
|
|
531
|
+
*/
|
|
532
|
+
设置连接超时时间(超时时间: 数字): 无返回值;
|
|
533
|
+
|
|
534
|
+
/**
|
|
535
|
+
* 设置写入超时时间
|
|
536
|
+
* @param 超时时间 写入超时时间(毫秒)
|
|
537
|
+
*/
|
|
538
|
+
设置写入超时时间(超时时间: 数字): 无返回值;
|
|
539
|
+
/**
|
|
540
|
+
* 设置自动重连
|
|
541
|
+
* @param 自动重连 是否自动重连
|
|
542
|
+
*/
|
|
543
|
+
设置自动重连(自动重连: 布尔值): 无返回值;
|
|
544
|
+
/**
|
|
545
|
+
* 启动心跳间隔
|
|
546
|
+
* @param 间隔 心跳间隔时间(毫秒)
|
|
547
|
+
* @param 回调 发送心跳消息的回调函数
|
|
548
|
+
*/
|
|
549
|
+
启动心跳间隔(间隔: 数字, 回调: () => 字符串): 无返回值;
|
|
550
|
+
/**
|
|
551
|
+
* 停止心跳间隔
|
|
552
|
+
*/
|
|
553
|
+
停止心跳间隔(): 无返回值;
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
**WebSocket 完整示例:**
|
|
557
|
+
|
|
558
|
+
```typescript
|
|
559
|
+
/**
|
|
560
|
+
* 创建 WebSocket 连接示例
|
|
561
|
+
*/
|
|
562
|
+
function 创建WebSocket连接示例() {
|
|
563
|
+
const ws = $HTTP.创建WebSocket连接("wss://echo.websocket.org", {
|
|
564
|
+
"User-Agent": "快点JS/1.0",
|
|
565
|
+
});
|
|
566
|
+
|
|
567
|
+
// 设置连接超时
|
|
568
|
+
ws.设置连接超时时间(10); // 10秒
|
|
569
|
+
ws.设置写入超时时间(5); // 5秒
|
|
570
|
+
ws.设置自动重连(true); // 自动重连
|
|
571
|
+
|
|
572
|
+
// 设置事件回调
|
|
573
|
+
ws.监听打开回调(() => {
|
|
574
|
+
logi("WebSocket 连接已打开");
|
|
575
|
+
|
|
576
|
+
// 连接成功后发送消息
|
|
577
|
+
ws.发送文本(
|
|
578
|
+
JSON.stringify({
|
|
579
|
+
type: "greeting",
|
|
580
|
+
message: "Hello from 快点JS!",
|
|
581
|
+
timestamp: Date.now(),
|
|
582
|
+
}),
|
|
583
|
+
);
|
|
584
|
+
});
|
|
585
|
+
|
|
586
|
+
ws.监听文本消息回调((data) => {
|
|
587
|
+
$打印信息日志(`收到文本消息: ${data}`);
|
|
588
|
+
|
|
589
|
+
try {
|
|
590
|
+
const message = JSON.parse(data);
|
|
591
|
+
handleMessage(message);
|
|
592
|
+
} catch (error) {
|
|
593
|
+
$打印错误日志(`消息解析失败: ${error}`);
|
|
594
|
+
}
|
|
595
|
+
});
|
|
596
|
+
|
|
597
|
+
ws.监听二进制消息回调((data) => {
|
|
598
|
+
$打印信息日志(`收到二进制消息,大小: ${data.byteLength}`);
|
|
599
|
+
// 处理二进制数据
|
|
600
|
+
});
|
|
601
|
+
|
|
602
|
+
ws.监听关闭回调(() => {
|
|
603
|
+
$打印信息日志("WebSocket 连接已关闭");
|
|
604
|
+
});
|
|
605
|
+
|
|
606
|
+
ws.监听异常回调((error) => {
|
|
607
|
+
$打印错误日志(`WebSocket 错误: ${error}`);
|
|
608
|
+
});
|
|
609
|
+
|
|
610
|
+
// 设置心跳
|
|
611
|
+
ws.启动心跳间隔(30, () => {
|
|
612
|
+
return JSON.stringify({ type: "ping", timestamp: Date.now() });
|
|
613
|
+
});
|
|
614
|
+
|
|
615
|
+
// 连接到服务器
|
|
616
|
+
ws.连接();
|
|
617
|
+
|
|
618
|
+
return ws;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
/**
|
|
622
|
+
* 处理接收到的消息
|
|
623
|
+
*/
|
|
624
|
+
function handleMessage(message: any) {
|
|
625
|
+
switch (message.type) {
|
|
626
|
+
case "pong":
|
|
627
|
+
$打印信息日志("收到心跳响应");
|
|
628
|
+
break;
|
|
629
|
+
|
|
630
|
+
case "notification":
|
|
631
|
+
$打印信息日志(`收到通知: ${message.content}`);
|
|
632
|
+
break;
|
|
633
|
+
|
|
634
|
+
case "command":
|
|
635
|
+
$打印信息日志(`收到命令: ${message.command}`);
|
|
636
|
+
executeCommand(message.command, message.params);
|
|
637
|
+
break;
|
|
638
|
+
|
|
639
|
+
default:
|
|
640
|
+
$打印信息日志(`未知消息类型: ${message.type}`);
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
/**
|
|
645
|
+
* 使用 WebSocket
|
|
646
|
+
*/
|
|
647
|
+
const websocket = 创建WebSocket连接示例();
|
|
648
|
+
|
|
649
|
+
// 发送状态消息
|
|
650
|
+
function sendStatusMessage() {
|
|
651
|
+
if (websocket.已连接()) {
|
|
652
|
+
websocket.发送文本(
|
|
653
|
+
JSON.stringify({
|
|
654
|
+
type: "status",
|
|
655
|
+
battery: $设备.获取电池状态(),
|
|
656
|
+
timestamp: Date.now(),
|
|
657
|
+
}),
|
|
658
|
+
);
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
// 调用发送状态消息
|
|
663
|
+
sendStatusMessage();
|
|
664
|
+
|
|
665
|
+
// 程序结束时关闭连接
|
|
666
|
+
function cleanup() {
|
|
667
|
+
if (websocket && websocket.已连接()) {
|
|
668
|
+
websocket.停止心跳间隔();
|
|
669
|
+
websocket.关闭();
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
```
|