Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sky-engine-tools

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:可独立运行的本地测试服务器。

在外部项目中生成 SKY

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 可编码终端文本。

解析 proxy2 请求 body

request, err := proxy2.ParseHTTPBody(httpRequest, proxy2.DefaultBodyLimit)
if err != nil {
	return err
}
targetURL, err := request.TargetURL()

解析结果包含原始 PacketHostPathRangeStart / 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

也可以直接调用 HandleStatsHandlePageHandleResourceHandleMRPHandleImage,或把 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 热重载

开发时可使用项目根目录的 .air.toml 自动重新构建并启动测试服务器。Air 是开发工具,不会加入项目的运行时依赖:

go install github.com/air-verse/air@latest
air

默认监听 0.0.0.0:8080。修改 .gogo.modgo.sum 后,Air 会重新执行构建并平滑重启进程;临时二进制位于 .tmp/air/,退出 Air 时会自动清理。

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages