github.com/msojocs/sky-engine-tools 提供可被其他 Go 项目直接调用的 SKY 页面生成器,以及 proxy2.51mrp.com 二进制协议和测试服务。
html2sky:解析 HTML,生成 WBRW 可读取的 SKY 页面。proxy2:解析/编码 proxy2 数据包,并提供基于net/http的/sta、/page2、/res、/mrp、/image服务。cmd/proxy2-test-server:可独立运行的本地测试服务器。
package main
import (
"net/url"
"github.com/msojocs/sky-engine-tools/html2sky"
)
func compileHTML(body []byte, rawURL string) ([]byte, error) {
requestURL, err := url.Parse(rawURL)
if err != nil {
return nil, err
}
return html2sky.Generate(body, requestURL, html2sky.Options{
MaxPayloadBytes: 7000,
})
}html2sky.Extract 可只提取页面模型;html2sky.BuildPage 可直接从 []html2sky.Item 构造 SKY;html2sky.EncodeUCS2BE 可编码终端文本。
request, err := proxy2.ParseHTTPBody(httpRequest, proxy2.DefaultBodyLimit)
if err != nil {
return err
}
targetURL, err := request.TargetURL()解析结果包含原始 Packet、Host、Path、RangeStart / RangeEnd,以及图片请求的 ImageMaxWidth / ImageMaxHeight。也可以对字节切片调用 proxy2.ParseRequest,或使用 proxy2.ParsePacket / proxy2.MarshalPacket 处理通用数据包。
options := proxy2.DefaultOptions()
options.AllowTarget = func(target *url.URL) error {
// 生产环境应在这里限制允许访问的目标主机或地址范围。
return nil
}
service := proxy2.NewService(options)
mux := http.NewServeMux()
service.Register(mux)
log.Fatal(http.ListenAndServe(":8080", mux))Register 使用与原服务一致的路径:
/mrp/proxy2.51mrp.com/sta
/mrp/proxy2.51mrp.com/page2
/mrp/proxy2.51mrp.com/res
/mrp/proxy2.51mrp.com/mrp
/mrp/proxy2.51mrp.com/image
也可以直接调用 HandleStats、HandlePage、HandleResource、HandleMRP、HandleImage,或把 Service 作为 http.Handler 挂载后使用 /page2 等短路径。
/mrp 在公共包中按通用 Range 上游代理实现,不包含 mrp-store 的数据库查询和本地资源模型;外部项目可把自己的下载接口作为请求目标,或在调用 HandleMRP 前完成业务映射。
go run ./cmd/proxy2-test-server -addr 0.0.0.0:8080可选参数:
-max-page-payload 7000 限制动态生成的 SKY 大小
-timeout 15s 上游 HTTP 超时
服务同时提供 GET /health。测试服务允许访问请求 body 指定的 HTTP(S) 目标;对外部署时应通过 Options.AllowTarget 限制目标,以免形成开放代理。
开发时可使用项目根目录的 .air.toml 自动重新构建并启动测试服务器。Air 是开发工具,不会加入项目的运行时依赖:
go install github.com/air-verse/air@latest
air默认监听 0.0.0.0:8080。修改 .go、go.mod 或 go.sum 后,Air 会重新执行构建并平滑重启进程;临时二进制位于 .tmp/air/,退出 Air 时会自动清理。