8. HTTP 请求¶
「HTTP 请求」所执行的功能,可简单的理解为执行脚本
脚本分为 「CRON 定时脚本任务」、「UI交互脚本」、「网络切换脚本」
其对应的配置文件位置为 [task_local]
可通过首页下方工具栏进入(默认UI),或 点击右下角「风车」进入设置 → 下方「工具 & 分析」- 「HTTP 请求」

8.1 添加 HTTP 请求¶
注意
以下主要讲的是 [task_local] 区块下的内容,所以示例都以 [task_local] 开头表明在其之下,并不是让你每个参数字段前都加上 [task_local]。
8.1.1 配置文本添加¶
提示
就像任何浏览器一样,脚本 URL 字符串中 # 之后的内容永远不会发送到服务器。可以在脚本 URL 后添加 # 来附加自定义参数,并在脚本中使用 API $environment.sourcePath 获取完整路径并提取自定义参数。例如:
$environment.sourcePath 自 QX v1.0.25 起可用,支持 task 和 rewrite 两种脚本。
其基本格式为
所有参数均为 key=value 格式(除最前面的脚本参数和 URL 外),顺序不限。
脚本参数:
-
event-network:对应「网络切换脚本」,当网络发生变化时自动执行(相关任务仅在 Quantumult X Tunnel 运行时触发) -
event-interaction:对应「UI交互脚本」,须与UI交互执行(相关任务仅在 Quantumult X Tunnel 运行时触发) -
5或6位CRON表达式:对应「CRON 定时脚本任务」,5位表达式从分开始,支持 5 或 6 位 CRON(不含 command 字段),具体请自行谷歌
资源链接:脚本资源位置,可为远程脚本,也可为本地脚本(保存在「我的 iPhone - Quantumult X - Scripts」或「iCloud Drive - Quantumult X - Scripts」)
tag:资源标签,可选
img-url:资源图标,可选
require-devices:可选参数,指定仅在特定设备ID上加载此任务,多个设备用逗号分隔(设备ID可在「设置 - 其他设置 - 关于」中查找)
enabled:是否启用该 HTTP 请求,若不使用可改为 false;
注意
脚本任务需 Quantumult X Tunnel (VPN) 处于运行状态,以及计划任务开关(右上角⏰)为开启状态
默认 HTTP 请求超时时间为 10 秒。
8.2 $task.fetch() API¶
$task.fetch() 可组装 HTTP 请求并处理响应,仅支持文本正文。一个 $task.fetch() 可嵌入另一个 $task.fetch() 的完成处理器中(用于实现串行请求而非并发请求)。
请求参数 myRequest 格式:
| 字段 | 类型 | 说明 |
|---|---|---|
url |
string | 请求 URL,必填 |
method |
string | HTTP 方法,可选,默认 GET |
headers |
object | 请求头,可选 |
body |
string | 请求体,可选 |
opts.redirection |
bool | 是否自动跟随重定向,可选,默认 true |
opts.skip-cert-verify |
bool | 跳过证书验证,可选,默认 false(自 build 649+ 支持) |
opts.auto-cookie |
bool | 是否启用自动 Cookie 管理,可选,默认 false(自 build 934+ 支持)。注意: build 934 之前此字段无效(始终等效 true);build 934 起默认关闭,需开启时设为 true |
opts.policy |
string | 指定策略发送请求,如 "direct",可选。注意:每次请求都会独立完成 TCP + TLS 握手,不会复用连接 |
Cookie 自动管理变更(build 934+)
自 build 934 起,$task.fetch 默认禁用自动 Cookie 管理。若脚本依赖自动 Cookie 处理(如登录态保持),需在 opts 中显式开启:
响应 response 对象:
| 字段 | 类型 | 说明 |
|---|---|---|
statusCode |
number | HTTP 状态码 |
headers |
object | 响应头 |
body |
string | 响应体(文本) |
8.1.2 UI 添加¶

- 如果给的是「完整的任务格式」,如:
可通过右上角 +→ 文本方式添加,直接粘贴即可

- 如果给的是「定时任务类型」,且为单独的脚本链接(或本地脚本文件),请阅读脚本内容,根据其需要,设置 CRON表达式
可通过右上角 +→ 高级,填写参数即可

8.2 执行脚本¶
注意
脚本任务需 Quantumult X Tunnel (VPN) 处于运行状态,以及计划任务开关(右上角⏰)为开启状态
-
event-network:对应「网络切换脚本」,当网络发生变化时自动执行 -
event-interaction:对应「UI交互脚本」,须与UI交互执行
启动 VPN 后,长按节点,即可执行

5或6位CRON表达式:对应「CRON 定时脚本任务」,5位表达式从分开始,具体请自行谷歌。也可左滑点击按钮执行或查看执行时的日志
8.3 任务仓库¶
- 添加任务仓库
路径需要填写资源的raw格式链接,点此查看教程
以下方的链接举例(这是个网页,不是真正能使用的资源链接):
- 从仓库中添加任务

8.4 本地 HTTP 后端 [http_backend]¶
提示
Quantumult X 支持部署本地 HTTP 服务器并使用 JavaScript 进行数据处理。部署后可通过以下地址访问:
- http://127.0.0.1:9999/your-path/your-api/
- http://quantumult-x:9999/your-path/your-api/
- http://localhost:9999/your-path/your-api/
由于 Network Extension 存在内存限制,请尽量保持后端脚本精简。
其基本格式为:
- 脚本路径:JavaScript 脚本的远程 URL 或本地文件路径
tag:资源标签,必填,用于标识此后端服务path:匹配路径,使用正则表达式,如^/example/v1/img-url:资源图标,可选require-devices:可选,指定仅在特定设备ID上加载此后端enabled:是否启用
脚本可用变量: $request.url、$request.path、$request.headers、$request.body、$prefs、$task、$notify(title, subtitle, message)、console.log(message)
输出: $done({status:"HTTP/1.1 200 OK", headers:{}, body:"here is a string"})
还可以使用签名或其他验证方法来校验请求的合法性。
完整示例见 sample-backend.js。
8.5 $configuration.sendMessage() API¶
自 QX v1.0.22+ (iOS 13.0+) 起,脚本可通过 $configuration.sendMessage() 与 Quantumult X 内核交互。
基本用法:
支持的操作:
| Action | 说明 | 可用版本 |
|---|---|---|
get_policy_state |
获取所有策略组状态 | v1.0.22+ |
set_policy_state |
设置静态策略组选择(仅 static 类型及内置 proxy) | v1.0.22+ |
url_latency_benchmark |
对指定节点进行延迟测试 | v1.0.22+ |
get_customized_policy |
获取自定义策略信息 | v1.0.22+ |
get_running_mode |
获取当前运行模式 | v1.0.22+ |
set_running_mode |
设置运行模式(all_proxy / all_direct / filter) |
v1.0.22+ |
get_server_description |
获取节点配置描述(仅 event-interaction 脚本) | v1.0.30+ |
dns_clear_cache |
清除所有 DNS 缓存 | v1.0.22+ |
dns_get_placeholder_ip |
获取域名的 placeholder IP 映射 | v1.0.22+ |
dns_update_cache |
插入/更新 DNS A 记录 | v1.0.22+ |
get_traffic_statistics |
获取流量统计(字节) | v1.0.28+ |
完整示例见 sample-configuration-api.js、sample-dns-api.js、sample-get-traffic-statistics.js。
8.6 $iCloud API¶
自 QX v1.0.31+ 起,脚本可读写 iCloud 文件(位于 iCloud Drive/Quantumult X/Data/):
| API | 说明 |
|---|---|
$iCloud.writeFile(Uint8Array, path) |
写入文件 |
$iCloud.readFile(path) |
读取文件,返回 Uint8Array |
$iCloud.removeFile(path) |
删除文件 |
完整示例见 sample-icloud-storage.js。