ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

把Surge变成无人值守下载机器:HTTP API接口参考与6个自动化脚本配方

2026/9/27 11:36:15 拓冰建站 浏览量
把Surge变成无人值守下载机器:HTTP API接口参考与6个自动化脚本配方 把Surge变成无人值守下载机器HTTP API接口参考与6个自动化脚本配方【免费下载链接】SurgeBlazing fast TUI download manager built in Go for power users项目地址: https://gitcode.com/gh_mirrors/surge46/SurgeSurge 是一款用 Go 语言编写、面向进阶用户的终端 TUI 下载管理器支持多连接并发、断点续传和镜像源自动切换。它内置了一套完整的 HTTP API 接口用surge server把 Surge 以无头模式常驻在服务器上之后就能用一行 curl、一个 cron 定时任务或一段 CI 脚本提交下载、查询进度、控制限速——把它彻底变成一台无人值守下载机器。为什么选择 Surge HTTP API 做无人值守下载 ⚡速度快多连接分片并发下载 断点续传下载 ISO、大文件时优势明显REST 接口常驻服务 JSON 接口天然适合脚本、Cron、CI/CD 集成实时推送内置 Server-Sent EventsSSE事件流不用轮询就能感知下载完成安全可控Bearer Token 认证任务级 / 全局 / 默认三级限速典型场景挂机下载服务器开机后自动拉取镜像和 ISO 文件定时抓取cron 定时提交数据抓取任务白天限速、夜间全速远程管理在办公电脑上用脚本控制家里 NAS 上的下载节点一键启动 Surge 无头服务器先启动后台服务再获取认证 token# 固定端口 1700指定认证 token 和输出目录 surge server --port 1700 --token $SURGE_TOKEN --output /srv/downloads # 获取当前服务器使用的 token后续脚本要用 surge token几个实用细节端口不指定时从 1700 开始自动寻找可用端口指定--port可获得固定地址Token可通过--token参数或SURGE_TOKEN环境变量提供不传则自动生成surge token随时可查端口与 token 会自动写入本地运行时目录本机 CLI 客户端会自动发现并连接一次性批量任务surge server --batch urls.txt --output /srv/downloads --exit-when-done队列清空后进程自动退出非常适合挂 cron注意服务器默认监听0.0.0.0所有网卡所以务必配置 token详见 cmd/root_http_server.go。Surge HTTP API 认证机制Bearer Token除/health外所有接口都要求Authorization请求头APIhttp://127.0.0.1:1700 TOKEN$(surge token) curl -s -H Authorization: Bearer $TOKEN $API/health # {status:ok,port:1700,mode:local}/health免认证可直接作为监控探活端点token 要像密码一样对待不要提交到代码仓库、不要留在 shell 历史里远程访问建议放在 HTTPS 反向代理之后避免 token 明文传输参见 docs/guides/connect-to-a-remote-server.md认证中间件实现见 cmd/root_http_server.gotoken 命令见 cmd/token.go核心接口速查表方法路径说明GET/health健康检查免认证POST/download提交单个下载任务GET/download?idxxx查询指定任务进度POST/download/batch批量提交下载任务GET/list获取全部下载任务列表GET/history获取已完成历史按完成时间倒序POST/pause?idxxx暂停任务POST/resume?idxxx恢复任务DELETE/delete?idxxx移出队列保留已下载文件DELETE/purge?idxxx移出队列并删除文件 ⚠️PUT/update-url?idxxx更换下载地址源失效时用POST/clear-completed一键清空已完成任务POST/clear-failed一键清空失败任务POST/rate-limit?idxxxrateN单任务限速N 字节/秒0 为不限POST/rate-limit/global?rateN全局实时限速POST/rate-limit/default?rateN新任务默认限速GET/eventsSSE 实时事件流完整路由注册代码见 cmd/http_api.go。常用接口详解提交下载任务POST /downloadcurl -s -X POST $API/download \ -H Authorization: Bearer $TOKEN \ -H Content-Type: application/json \ -d {url:https://example.com/archive.zip,path:/srv/downloads}返回任务 ID{status:queued,message:Download queued successfully,id:57995086-...,filename:archive.zip}常用请求体字段结构定义见 cmd/root_downloads.go字段说明url必填下载地址filename/path指定文件名和目标目录mirrors备用镜像列表主源失败自动切换headers自定义请求头Cookie、鉴权等workers/min_chunk_size覆盖单任务的并发数和最小分片大小在服务器无 TUI模式下非重复任务会自动批准直接入队无需人工确认——这正是无人值守的关键。查询进度GET /download?idxxx与GET /list{id:57995086-...,url:...,progress:21.0,speed:17.8,status:downloading,eta:47,connections:7}状态对象包含progress百分比、speed、status、eta、connections等字段定义见 internal/types/models.go方便用jq直接解析。暂停、恢复与删除curl -s -X POST -H Authorization: Bearer $TOKEN $API/pause?id$ID curl -s -X POST -H Authorization: Bearer $TOKEN $API/resume?id$ID curl -s -X DELETE -H Authorization: Bearer $TOKEN $API/purge?id$ID # 连文件一起删慎用限速控制/rate-limit三件套rate参数是字节/秒的整数10485760 10 MB/s传0表示不限速# 单个任务限速 10 MB/s curl -s -X POST -H Authorization: Bearer $TOKEN $API/rate-limit?id$IDrate10485760 # 全局限速 50 MB/s curl -s -X POST -H Authorization: Bearer $TOKEN $API/rate-limit/global?rate52428800实时事件流GET /eventsSSEcurl -N -s -H Authorization: Bearer $TOKEN $API/events服务器会持续推送event: xxxdata: {json}形式的事件帧实时反映队列中的进度、完成与错误脚本里用它比轮询更省资源。调优下载性能参数通过 API 提交的任务同样受 Surge 的性能设置约束。你可以在 TUI 的 Network 设置页调整最大并发连接数、并发下载数等参数6个可直接抄走的自动化脚本配方 配方 1提交下载并等待完成#!/usr/bin/env bash set -euo pipefail APIhttp://127.0.0.1:1700 ID$(curl -s -X POST $API/download \ -H Authorization: Bearer $TOKEN -H Content-Type: application/json \ -d {url:https://example.com/image.iso} | jq -r .id) until curl -s $API/download?id$ID -H Authorization: Bearer $TOKEN \ | jq -e .progress 100 /dev/null; do sleep 2 done echo 下载完成$ID配方 2从 URL 文件批量导入#!/usr/bin/env bash set -euo pipefail # urls.txt 中每行一个 URL BODY$(jq -n [inputs | {url: ., skip_approval: true}] urls.txt) curl -s -X POST $API/download/batch \ -H Authorization: Bearer $TOKEN -H Content-Type: application/json \ -d $BODY # 全部成功 {status:queued,count:N}部分失败 status partial failures 明细配方 3监听 SSE 事件流打日志curl -N -s -H Authorization: Bearer $TOKEN $API/events | \ while IFS read -r line; do [[ $line event:* ]] echo [$(date %F %T)] $line done配方 4cron 白天限速、夜间全速# /etc/cron.d/surge-limits按实际环境替换 $SURGE_TOKEN 的值 0 9 * * * curl -s -X POST -H Authorization: Bearer ${SURGE_TOKEN} http://127.0.0.1:1700/rate-limit/global?rate10485760 0 23 * * * curl -s -X POST -H Authorization: Bearer ${SURGE_TOKEN} http://127.0.0.1:1700/rate-limit/global?rate0配方 5定期清理已完成任务保持队列清爽*/5 * * * * curl -s -X POST -H Authorization: Bearer ${SURGE_TOKEN} http://127.0.0.1:1700/clear-completed /dev/null配方 6健康探活配合监控系统# /health 免认证直接可用作外部监控探针 curl -sf http://127.0.0.1:1700/health || echo Surge 服务器离线安全部署清单 ✅不要把 API 直接暴露到公网放在 HTTPS 反向代理之后并限制来源 IPtoken 即密码使用--token显式指定避免出现在历史记录和截图中远程打开文件/文件夹类接口/open-file、/open-folder默认只允许本机请求确有需要时再通过设置开启一次性批量任务优先用--exit-when-done下载完自动退出减少常驻攻击面延伸阅读 docs/reference/commands/server.mdsurge server完整命令参考docs/guides/download-files.mdCLI 下载管理指南docs/guides/run-as-a-service.md把 Surge 注册为系统服务开机自启cmd/http_api.go全部 HTTP 路由与参数校验逻辑extension/浏览器扩展源码正是基于这套 HTTP API 构建的参考客户端【免费下载链接】SurgeBlazing fast TUI download manager built in Go for power users项目地址: https://gitcode.com/gh_mirrors/surge46/Surge创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考