修改 内置资源XHR代理请求

This commit is contained in:
杨红岩 2023-08-26 00:29:03 +08:00
parent 00c3bdbbc7
commit 2874edbe53
2 changed files with 26 additions and 25 deletions

View File

@ -30,11 +30,7 @@ const (
var localLoadRes *LocalLoadResource var localLoadRes *LocalLoadResource
// LocalLoadResource 初始化时设置 // LocalLoadResource 初始化时设置
// 本地或内置加载资源 // 本地&内置加载资源
// domain: 自定义域名称默认energy, 不能为空
// scheme: 自定义协议默认fs, 可选[file: 在本地目录加载, fs: 在内置exe加载]
// fileRoot: 资源加载根目录, scheme是file时为本地目录(默认当前程序执行目录), scheme是fs时为资源文件夹名
// fs: 内置加载资源对象, scheme是fs时必须填入
type LocalLoadResource struct { type LocalLoadResource struct {
LocalLoadConfig LocalLoadConfig
mimeType map[string]string mimeType map[string]string
@ -42,20 +38,15 @@ type LocalLoadResource struct {
} }
// LocalLoadConfig // LocalLoadConfig
// 本地资源加载配置 // 本地&内置资源加载配置
// domain: 自定义域名称默认energy, 不能为空
// scheme: 自定义协议默认fs, 可选[file: 在本地目录加载, fs: 在内置exe加载]
// fileRoot: 资源加载根目录, scheme是file时为本地目录(默认当前程序执行目录), scheme是fs时为资源文件夹名
// fs: 内置加载资源对象, scheme是fs时必须填入
// proxy: 数据请求代理
type LocalLoadConfig struct { type LocalLoadConfig struct {
Enable bool // 设置是否启用本地资源缓存到内存, 默认false: 未启用, 提示: 启用该功能, 目前无法加载本地媒体, 媒体资源可http方式加载 Enable bool // 设置是否启用本地资源缓存到内存, 默认false: 未启用, 提示: 启用该功能, 目前无法加载本地媒体, 媒体资源可http方式加载
EnableCache bool // 启用缓存,将加载过的资源存储到内存中 EnableCache bool // 启用缓存,将加载过的资源存储到内存中
Domain string // 必须设置的域 Domain string // 必须设置的域
Scheme LocalCustomerScheme // 自定义协议, file: 本地磁盘目录加载, fs: 内置到执行程序加载 Scheme LocalCustomerScheme // 自定义协议, file: 本地磁盘目录加载, fs: 内置到执行程序加载
FileRoot string // 资源根目录, scheme是file时为本地目录(默认当前程序执行目录) scheme是fs时为资源文件夹名 FileRoot string // 资源根目录, scheme是file时为本地目录(默认当前程序执行目录) scheme是fs时为资源文件夹名, 默认:[resources or /current/path]
FS *embed.FS // 内置加载资源对象, scheme是fs时必须填入 FS *embed.FS // 内置加载资源对象, scheme是fs时必须填入
Proxy IXHRProxy // 数据请求代理, 在浏览器发送xhr请求时可通过该配置转发, 你可可以实现该 IXHRProxy 接口自己实现 Proxy IXHRProxy // 数据请求代理, 在浏览器发送xhr请求时可通过该配置转发, 你可自定义实现该 IXHRProxy 接口
Home string // 默认首页: /index.html, /home.html, /other.html, default: /index.html Home string // 默认首页: /index.html, /home.html, /other.html, default: /index.html
} }
@ -75,7 +66,7 @@ type source struct {
// 初始化本地加载配置对象 // 初始化本地加载配置对象
func localLoadResourceInit(config LocalLoadConfig) { func localLoadResourceInit(config LocalLoadConfig) {
if localLoadRes != nil { if localLoadRes != nil || config.FS == nil {
return return
} }
localLoadRes = &LocalLoadResource{ localLoadRes = &LocalLoadResource{
@ -95,6 +86,14 @@ func localLoadResourceInit(config LocalLoadConfig) {
} else if config.Home[0] != '/' { } else if config.Home[0] != '/' {
config.Home = "/" + config.Home config.Home = "/" + config.Home
} }
if config.FileRoot == "" {
if config.Scheme == LocalCSFS {
config.FileRoot = "resources"
} else if config.Scheme == LocalCSFile {
wd, _ := os.Getwd()
config.FileRoot = wd
}
}
//if config.Proxy != nil { //if config.Proxy != nil {
// if proxy, ok := config.Proxy.(*XHRProxy); ok { // if proxy, ok := config.Proxy.(*XHRProxy); ok {
// if proxy.Scheme == LpsTcp { // if proxy.Scheme == LpsTcp {

View File

@ -24,29 +24,31 @@ import (
"strconv" "strconv"
) )
// cookies jar
var jar, _ = cookiejar.New(nil) var jar, _ = cookiejar.New(nil)
type IXHRProxy interface { type IXHRProxy interface {
Send(request *ICefRequest) (*XHRProxyResponse, error) Send(request *ICefRequest) (*XHRProxyResponse, error) // 发送请求,在浏览器进程同步执行
} }
// XHRProxy // XHRProxy
// 数据请求代理 // 数据请求代理
type XHRProxy struct { type XHRProxy struct {
Scheme LocalProxyScheme // http/https/tcp default: http Scheme LocalProxyScheme // http/https/tcp default: http
IP string // default localhost IP string // default: localhost
Port int // default 80 Port int // default: 80
SSLCert string // /to/path/cert.pem SSLCert string // /to/path/cert.crt, https时 该参数为空跳过检查
SSLKey string // /to/path/key.pem SSLKey string // /to/path/key.key, https时 该参数为空跳过检查
SSLCARoot string // /to/path/ca.crt https时 该参数为空跳过检查
} }
// XHRProxyResponse // XHRProxyResponse
// 代理响应数据
type XHRProxyResponse struct { type XHRProxyResponse struct {
Data []byte Data []byte // 响应数据
DataSize int DataSize int // 响应数据大小
StatusCode int32 StatusCode int32 // 响应状态码
Header map[string][]string Header map[string][]string // 响应头
} }
func (m *XHRProxy) Send(request *ICefRequest) (*XHRProxyResponse, error) { func (m *XHRProxy) Send(request *ICefRequest) (*XHRProxyResponse, error) {