资讯动态

Gopeed 全平台下载器实战指南:HTTP/BT/Magnet/ed2k 多协议下载、AI 集成与跨平台构建

发布时间:2026/9/10 19:25:25 来源:尧图企业网站定制
Gopeed 全平台下载器实战指南HTTP/BT/Magnet/ed2k 多协议下载、AI 集成与跨平台构建【免费下载链接】gopeedA fast, modern download manager for HTTP, BitTorrent, Magnet, and ed2k. Cross-platform, built with Golang and Flutter.项目地址: https://gitcode.com/GitHub_Trending/go/gopeedGopeedGo Speed是一个用 Go 与 Flutter 构建的开源跨平台下载管理器覆盖 HTTP/HTTPS、BitTorrent、Magnet 磁力链接与 ed2k 四种主流协议可运行于桌面Windows/macOS/Linux、移动端Android/iOS与 Web并支持 Docker 部署。本文以仓库 README.md 为主线结合 go.mod、pkg/rest、pkg/download、pkg/mcpserver 等源码系统讲解 Gopeed 的核心能力、AIMCP集成、REST API 与命令行使用、浏览器扩展、Docker 部署以及从源码构建各平台客户端的完整流程。读完本文你将能够独立完成 Gopeed 的安装部署、通过 REST API/MCP 实现自动化下载并掌握多平台从源码构建的方法。一、项目概览与技术架构1.1 定位与特性Gopeed 定位为快速、现代、免费、开源的下载管理器其核心特性可归纳为以下几类多协议支持HTTP/HTTPS 直链、BitTorrent、Magnet 磁力链接、ed2k全部由单一应用统一管理。协议解析通过插件化的 fetcher 架构实现见 internal/fetcher/fetcher.goHTTP、BT、ed2k 的 fetcher 分别位于 internal/protocol/http/fetcher.go、internal/protocol/bt/fetcher.go、internal/protocol/ed2k/fetcher.go。高速下载通过并发任务调度、HTTP 多连接分段下载默认 16 连接见 cmd/gopeed/flags.go与 P2P 网络充分利用带宽。完整的 BitTorrent 能力DHT 节点发现、uTP 传输、Web Seeds、选择性文件下载、Tracker 管理、peer/piece 统计以及按分享率或时长限制的做种设置。这些配置在 internal/protocol/bt/config.go 中定义SeedKeep、SeedRatio、SeedTime、ListenPort、Trackers底层基于 go.mod 中的github.com/anacrolix/torrent库实现。任务管理暂停、继续、重试、批量操作、状态过滤搜索、分类整理以及重启后任务恢复Downloader.ContinueOnStartup()见 pkg/rest/server.go。轻量原生体验主界面由 Flutter 原生渲染不使用 Electron 或 WebView 壳体积与开销更小。桌面/移动端通过 FFI 直连 Go 内核绑定层见 bind/desktop/main.go 与 bind/mobile/main.go。自动化能力REST API、CLI、带鉴权的 Web UI、Webhook 通知、下载后脚本以及 MCP 端点AI 集成。内置实用功能自定义请求头与 User-Agent、代理与 GitHub 镜像、系统通知、下载后自动解压支持 7z/rar/zip见 pkg/download/extract.go 及 extract_7z/rar/zip 拆分文件。1.2 前后端通信架构Gopeed 由 Flutter 前端与 Go 后端组成两者通过 HTTP 通信Unix 系操作系统使用 Unix SocketWindows 使用 TCP。前端源码位于 ui/flutter 目录后端通过 pkg/rest 包对外暴露 HTTP 服务与 Web UI。桌面端在 bind/desktop/main.go 中通过 cgo 导出Start、Stop、Invoke、SubscribeTaskEvents等 C 函数Flutter 侧通过 FFI 直接调用 Go 内核实现进程内通信与事件订阅。二、AI 集成通过 MCP 用自然语言管理下载Gopeed 2.0 引入了基于 Model Context ProtocolMCP的 AI 集成能力。启动 Web 服务时加上--mcp-enable参数见 cmd/web/flags.go即可在/mcp路径暴露一个无状态的 Streamable HTTP MCP 端点兼容支持 MCP 的 AI 客户端如各类 Agent 工具。接入后可以直接用自然语言操作例如Download the latest Gopeed client for Windows.MCP 服务器实现位于 pkg/mcpserver/server.go它基于github.com/modelcontextprotocol/go-sdk构建并通过 JSON Schema 自动生成各工具的参数契约。内置的 9 个工具如下工具说明resolve_task解析下载 URL/URI在创建任务前返回资源元数据与文件列表可配合opts.selectFiles选择文件create_task从已解析的资源 IDrid或直接请求创建并启动任务list_tasks列出任务可按 ID 或状态过滤ready、running、pause、wait、error、done定义见 pkg/base/constants.goget_task获取单个任务的请求、资源、选项与当前进度get_task_status获取轻量运行时状态与逐文件进度get_task_stats获取协议级统计如 HTTP 连接数、BitTorrent peer 与做种数据pause_task暂停任务continue_task继续暂停或失败的任务delete_task删除任务可选force同时删除已下载文件工具调用与Downloader的方法一一对应resolve_task调用downloader.Resolve、create_task调用downloader.Create/downloader.CreateDirect、list_tasks调用GetTasksByFilter、get_task_stats调用Stats等同一套操作也可通过 REST API 完成见 pkg/api/service.go。MCP 协议对请求做了类型化约束HTTP 请求可携带method、header、body等协议扩展参数BT 请求可携带trackers列表任务选项支持name、path、asDefaultPath、selectFiles以及 HTTP 专属的connections、autoTorrent、autoExtract、archivePassword、deleteAfterExtract等字段见 pkg/mcpserver/server.go。服务端还会校验协议与扩展参数的匹配关系例如给非 BT 资源传入trackers会被拒绝。三、下载与安装3.1 版本现状Gopeed 2.0.0 目前处于公开 Beta 阶段主要变化包括重新设计的界面、桌面与移动客户端通过 FFI 直连 Go 内核的原生通信架构、更一致的多平台体验、改进的任务管理、更灵活的 API 支持以及基于 MCP 的 AI 集成。Beta 用户后续可直接升级到正式版稳定版用户不会被自动切换到 Beta 通道。正式版与 Beta 版均可从官方发布渠道获取。3.2 命令行工具CLICLI 入口位于 cmd/gopeed/main.go可通过go install直接安装go install github.com/GopeedLab/gopeed/cmd/gopeedlatestCLI 使用方式为gopeed url支持直链、torrent 文件与磁力链接。参数定义见 cmd/gopeed/flags.go参数说明默认值-C并发连接数16-D文件存储目录当前工作目录-h帮助信息—# 下载一个 HTTP 文件使用 32 个并发连接保存到 ~/Downloads gopeed -C 32 -D ~/Downloads https://example.com/file.zip # 下载 torrent 文件 gopeed bt.torrent # 下载磁力链接 gopeed magnet:?xturn:btih:...CLI 在终端内以进度条形式实时展示下载百分比、速度与总大小下载完成或失败后会输出保存路径或失败原因实现见 cmd/gopeed/main.go。它通过download.Boot()链式配置 URL、事件监听与base.Options路径、HTTP 连接数完成下载任务。四、浏览器扩展与微信渠道Gopeed 提供浏览器扩展可将 Chrome、Edge、Firefox 及其他兼容浏览器的下载任务直接发送到 Gopeed 客户端扩展仓库为独立的 GopeedLab/browser-extension。此外项目维护者通过微信公众号发布更新动态。五、自托管 Web 服务与 REST API5.1 Web 服务启动与参数Web 服务入口为 cmd/web/main.go以web构建标签编译构建命令见 README.md 的 Web 小节将 Flutter Web 产物以embed方式内嵌到二进制中从而提供单文件 自带 Web UI的自托管服务。启动后默认监听0.0.0.0:9999。参数定义与解析位于 cmd/web/flags.go支持三种配置来源优先级从高到低为命令行参数 环境变量GOPEED_前缀 配置文件默认./config.json 内置默认值。这一优先级逻辑在 cmd/web/flags.go 的parse()中实现并有完整的测试覆盖见 cmd/web/flags_test.go。参数短/长环境变量说明默认值-A/--addressGOPEED_ADDRESS监听地址0.0.0.0-P/--portGOPEED_PORT监听端口9999-u/--usernameGOPEED_USERNAMEWeb 鉴权用户名gopeed-p/--passwordGOPEED_PASSWORDWeb 鉴权密码不设置则不启用鉴权空-T/--api-tokenGOPEED_APITOKENAPI Token启用 Web 鉴权后调用 HTTP API 必须携带空--mcp-enableGOPEED_MCPENABLE启用 MCP 端点false-d/--storage-dirGOPEED_STORAGEDIR数据存储目录任务与配置持久化可执行文件目录下storage/--white-download-dirsGOPEED_WHITEDOWNLOADDIRS允许的下载目录白名单逗号分隔空-c/--config—配置文件路径./config.json配置示例config.json{ address: 0.0.0.0, port: 9999, username: gopeed, password: your-password, apiToken: your-api-token, mcpEnable: true, storageDir: /data/gopeed/storage, whiteDownloadDirs: [/data/gopeed/downloads], downloadConfig: { downloadDir: /data/gopeed/downloads, maxRunning: 10, protocolConfig: { http: { maxConnections: 16 } } } }启动示例# 简单启动无鉴权 ./gopeed # 启用 Web 鉴权、API Token 与 MCP限制下载目录 ./gopeed -A 0.0.0.0 -P 9999 -u admin -p secret -T token --mcp-enable \ --white-download-dirs /data/downloads -d /data/gopeed/storage说明Web 鉴权通过用户名/密码登录换取会话 Cookie有效期 7 天见 pkg/rest/server.go未设置密码时不启用鉴权。启用 Web 鉴权后调用 HTTP API 必须携带X-Api-Token请求头且若启用 API TokenWeb 鉴权的用户名与密码必须同时配置校验逻辑见 pkg/rest/model/server.go。存储默认使用 BoltDBStorageBolt任务与配置持久化在 storage 目录启动时的默认下载目录规则见 cmd/server.goDocker 内为${可执行文件目录}/Downloads否则为${用户主目录}/Downloads。5.2 REST API 一览REST API 的路由声明集中在 pkg/api/service.go全部以/api/v1为前缀返回统一的 JSON 结果结构code/msg/data见 pkg/rest/model/result.go。主要端点方法路径说明GET/api/v1/info服务版本、运行环境os/arch、是否运行在 DockerPOST/api/v1/resolve解析资源返回元数据与文件列表POST/api/v1/tasks创建任务rid或直接请求reqPOST/api/v1/tasks/batch批量创建任务PATCH/api/v1/tasks/{id}修改任务请求/选项PUT/api/v1/tasks/{id}/pause、/api/v1/tasks/pause暂停单个/批量任务PUT/api/v1/tasks/{id}/continue、/api/v1/tasks/continue继续单个/批量任务DELETE/api/v1/tasks/{id}、/api/v1/tasks删除任务?forcetrue同时删除文件GET/api/v1/tasks、/api/v1/tasks/{id}按过滤条件列出任务 / 获取单个任务GET/api/v1/tasks/{id}/status运行时状态与逐文件进度GET/api/v1/tasks/{id}/stats协议统计HTTP 连接 / BT peer、做种数据GET/PUT/api/v1/config读取/更新下载器全局配置POST/api/v1/extensions安装扩展Git 仓库或本地目录devMode开发模式GET/api/v1/extensions、/api/v1/extensions/{identity}扩展列表 / 扩展详情PUT/api/v1/extensions/{identity}/settings更新扩展设置PUT/api/v1/extensions/{identity}/switch启用/停用扩展DELETE/api/v1/extensions/{identity}删除扩展GET/POST/api/v1/extensions/{identity}/update检查扩展更新 / 更新扩展POST/api/v1/webhook/test测试 Webhook URL任务列表的过滤参数id可多个、status包含的状态、notStatus排除的状态。任务状态定义于 pkg/base/constants.goready、running、pause、wait、error、done。# 解析一个磁力链接获取资源元数据 curl -X POST http://127.0.0.1:9999/api/v1/resolve \ -H Content-Type: application/json \ -d {req: {url: magnet:?xturn:btih:...}} # 直接创建 HTTP 下载任务 curl -X POST http://127.0.0.1:9999/api/v1/tasks \ -H Content-Type: application/json \ -d {req: {url: https://example.com/file.zip}, opts: {path: /data/downloads}} # 暂停指定任务启用鉴权时携带 X-Api-Token curl -X PUT http://127.0.0.1:9999/api/v1/tasks/task-id/pause \ -H X-Api-Token: tokenREST 处理器pkg/rest/api.go与 goapi Service 双轨并存goapi 提供可嵌入库的路由匹配与分发Dispatch/JSON见 pkg/api/routes.go 与 pkg/api/service.goHTTP 层则基于 gorilla/mux 注册路由并转发同时提供 Web 登录、静态资源/fs/tasks、/fs/extensions与 gzip 中间件见 pkg/rest/server.go。5.3 Webhook 与下载后脚本Gopeed 支持两种自动化通知/回调机制事件类型一致DOWNLOAD_DONE、DOWNLOAD_ERRORWebhook下载完成或失败时向配置的 URL 发送POST请求JSON 体包含event、timeUnix 毫秒时间戳与payload.task完整任务对象超时 10 秒见 pkg/download/webhook.go。支持新版webhook配置段与旧版extra.webhookUrls两种格式。下载后脚本按配置的脚本路径列表执行本地脚本通过标准输入传入 JSON 数据event/time/payload.task实现见 pkg/download/script.go。脚本在下载完成/失败事件触发时执行。5.4 JavaScript 扩展Gopeed 支持 JavaScript 扩展可为视频平台、AI 模型中心、云存储等下载源添加解析能力。扩展通过 git 仓库或本地目录安装核心机制扩展包根目录需包含manifest.json与入口index.js安装、启用、设置与升级的管理实现见 pkg/download/extension.go。扩展运行在基于 gojaGo 实现的 ECMAScript 引擎的 JS 引擎中pkg/download/engine/engine.go 提供RunString/CallFunction执行入口并注入 fetch、XHR、文件、流等运行时能力见 pkg/download/engine/inject 下的 fetch/file/stream/xhr/vm 模块。扩展可注册onResolve、onStart、onError、onDone生命周期钩子见 pkg/download/extension.go并拥有独立的键值存储bucketextension_storage。仓库 pkg/download/testdata/extensions 下提供了basic、blob、settings_all、update、storage、on_done等 15 个测试扩展覆盖解析、设置、存储、更新与错误处理等场景是编写扩展的最佳参考模板。六、Docker 部署仓库根目录提供 Dockerfile 与 docker-compose.yml。Dockerfile 使用多阶段构建第一阶段以golang:1.25.4-alpine编译带nosqlite,web标签的 Web 服务并注入版本号与InDockertrue标识-X github.com/GopeedLab/gopeed/pkg/base.Version... -X github.com/GopeedLab/gopeed/pkg/base.InDockertrue第二阶段基于alpine:3.23运行默认EXPOSE 9999。services: gopeed: container_name: gopeed ports: - 9999:9999 # HTTP port (host:container) environment: - PUID0 - PGID0 - UMASK022 volumes: - ~/gopeed/Downloads:/app/Downloads # mount download path #- ~/gopeed/storage:/app/storage # if you need to mount storage path, uncomment this line restart: unless-stopped image: liwei2633/gopeed # command: -u Username -p Password # optional authentication启动方式docker compose up -d要点下载目录挂载到/app/Downloads容器内默认下载路径规则见 cmd/server.go如需持久化任务数据取消storage卷的注释。PUID/PGID/UMASK由 entrypoint.sh 中的su-exec应用用于以指定用户身份运行进程。通过command传参即可开启 Web 鉴权例如-u Username -p Password。七、从源码构建7.1 环境要求Go 1.25go.mod 声明go 1.25.4Flutter 3.41桌面/移动端构建需要可用的 C 工具链cgo7.2 克隆与贡献git clone gitgithub.com:GopeedLab/gopeed.git贡献指南见 CONTRIBUTING.md另有 CONTRIBUTING_zh-CN.md 等语言版本。7.3 桌面端构建桌面端需要先按 Flutter 官方桌面指南配置对应平台的开发环境并确保 cgo 工具链可用然后将 Go 内核编译为共享库交给 Flutter 链接。Windowsgo build -tags nosqlite -ldflags-w -s -buildmodec-shared -o ui/flutter/windows/libgopeed.dll github.com/GopeedLab/gopeed/bind/desktop cd ui/flutter flutter build windowsmacOSgo build -tags nosqlite -ldflags-w -s -buildmodec-shared -o ui/flutter/macos/Frameworks/libgopeed.dylib github.com/GopeedLab/gopeed/bind/desktop cd ui/flutter flutter build macosLinuxgo build -tags nosqlite -ldflags-w -s -buildmodec-shared -o ui/flutter/linux/bundle/lib/libgopeed.so github.com/GopeedLab/gopeed/bind/desktop cd ui/flutter flutter build linuxnosqlite标签用于关闭 SQLite 支持使用 BoltDB 存储-w -s用于缩减二进制体积。7.4 移动端构建移动端同样需要 cgo 工具链并额外使用gomobile将 Go 内核打包为 AARAndroid与 XCFrameworkiOSgo install golang.org/x/mobile/cmd/gomobilelatest go get golang.org/x/mobile/bind gomobile initAndroidgomobile bind -tags nosqlite -ldflags-w -s -checklinkname0 -o ui/flutter/android/app/libs/libgopeed.aar -targetandroid -androidapi 21 -javapkgcom.gopeed github.com/GopeedLab/gopeed/bind/mobile cd ui/flutter flutter build apkiOSgomobile bind -tags nosqlite -ldflags-w -s -o ui/flutter/ios/Frameworks/Libgopeed.xcframework -targetios github.com/GopeedLab/gopeed/bind/mobile cd ui/flutter flutter build ios --no-codesign7.5 Web 端构建Web 端将 Flutter Web 产物拷入 cmd/web 目录并以embed内嵌再编译带web标签的服务器二进制cd ui/flutter flutter build web cd ../../ rm -rf cmd/web/dist cp -r ui/flutter/build/web cmd/web/dist go build -tags nosqlite,web -ldflags-s -w -o bin/ github.com/GopeedLab/gopeed/cmd/web构建完成后bin/gopeed或自定义输出名即是一个自带 Web UI 的单文件服务可直接按第五节的方式运行。八、总结Gopeed 以 Go 内核 Flutter 前端的架构在一套代码库内实现了桌面、移动、Web 三端覆盖并同时打通了 HTTP、BitTorrent、Magnet、ed2k 四种下载协议。对于开发者而言它既是开箱即用的下载工具CLI、Web UI、浏览器扩展、Docker也是可编程的下载基础设施——REST API 与 MCP 端点让脚本和 AI Agent 都能以统一接口创建、查询与管理下载任务。无论是个人使用、NAS 部署还是构建自定义下载服务本文覆盖的安装、配置、自动化与源码构建流程都可以直接作为实践起点深入 pkg/download、pkg/rest 与 pkg/mcpserver 的源码则可以进一步理解其任务调度、协议解析与扩展机制的设计细节。【免费下载链接】gopeedA fast, modern download manager for HTTP, BitTorrent, Magnet, and ed2k. Cross-platform, built with Golang and Flutter.项目地址: https://gitcode.com/GitHub_Trending/go/gopeed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价