Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
energye
energy
提交
2f541ca4
energy
项目概览
energye
/
energy
通知
13
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
energy
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
2f541ca4
编写于
8月 25, 2023
作者:
yanghye
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加内置资源代理 支持HttpServer和本地与内置方式加载资源.
上级
d096eab3
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
48 addition
and
29 deletion
+48
-29
cef/local-load-resource.go
cef/local-load-resource.go
+39
-22
cef/local-load-xhr-proxy.go
cef/local-load-xhr-proxy.go
+9
-7
未找到文件。
cef/local-load-resource.go
浏览文件 @
2f541ca4
...
...
@@ -12,13 +12,13 @@ package cef
import
(
"embed"
"fmt"
.
"github.com/energye/energy/v2/consts"
"github.com/energye/energy/v2/logger"
"io/ioutil"
"net/url"
"os"
"path/filepath"
"strings"
"unsafe"
)
...
...
@@ -147,7 +147,7 @@ func (m *LocalLoadResource) checkRequest(request *ICefRequest) (*source, bool) {
return
nil
,
false
}
reqUrl
,
err
:=
url
.
Parse
(
request
.
URL
())
logger
.
Debug
(
"LocalLoadResource URL:"
,
reqUrl
.
String
())
logger
.
Debug
(
"LocalLoadResource URL:"
,
reqUrl
.
String
()
,
"RT:"
,
rt
)
if
err
!=
nil
{
logger
.
Error
(
"LocalLoadResource, scheme invalid should:"
,
LocalCSFS
,
"or"
,
LocalCSFile
)
return
nil
,
false
...
...
@@ -165,10 +165,10 @@ func (m *LocalLoadResource) checkRequest(request *ICefRequest) (*source, bool) {
path
=
m
.
Home
}
ext
:=
m
.
ext
(
path
)
if
ext
==
""
&&
rt
!=
RT_XHR
{
/*
if ext == "" && rt != RT_XHR {
logger.Error("LocalLoadResource Incorrect resources should: file.[ext](MimeType)")
return nil, false
}
}
*/
// 如果开启缓存,直接在缓存拿指定地址的source
if
m
.
EnableCache
{
if
s
,
ok
:=
m
.
sourceCache
[
path
];
ok
{
...
...
@@ -183,27 +183,23 @@ func (m *LocalLoadResource) checkRequest(request *ICefRequest) (*source, bool) {
}
// 读取本地或内置资源
func
(
m
*
source
)
readFile
()
bool
{
func
(
m
*
source
)
readFile
()
{
// 必须设置文件根目录, scheme是file时, fileRoot为本地文件目录, scheme是fs时, fileRoot为fs的目录名
if
localLoadRes
.
FileRoot
!=
""
{
if
localLoadRes
.
Scheme
==
LocalCSFile
{
m
.
bytes
,
m
.
err
=
ioutil
.
ReadFile
(
filepath
.
Join
(
localLoadRes
.
FileRoot
,
m
.
path
))
// 在本地读取
if
m
.
err
==
nil
{
return
true
}
if
m
.
err
!=
nil
{
logger
.
Error
(
"ReadFile:"
,
m
.
err
.
Error
())
}
}
else
if
localLoadRes
.
Scheme
==
LocalCSFS
&&
localLoadRes
.
FS
!=
nil
{
//在fs读取
m
.
bytes
,
m
.
err
=
localLoadRes
.
FS
.
ReadFile
(
localLoadRes
.
FileRoot
+
m
.
path
)
if
m
.
err
==
nil
{
return
true
}
if
m
.
err
!=
nil
{
logger
.
Error
(
"ReadFile:"
,
m
.
err
.
Error
())
}
}
//失败时,返回404,文件不存在
return
false
}
}
// checkRequest = true, 打开资源
...
...
@@ -220,7 +216,6 @@ func (m *source) open(request *ICefRequest, callback *ICefCallback) (handleReque
m
.
bytes
,
m
.
err
=
result
.
Data
,
err
m
.
status
=
result
.
StatusCode
m
.
header
=
result
.
Header
return
true
,
true
}
}
else
{
// 如果开启缓存,直接在缓存取
...
...
@@ -231,12 +226,27 @@ func (m *source) open(request *ICefRequest, callback *ICefCallback) (handleReque
}
else
{
m
.
readFile
()
}
}
if
m
.
err
==
nil
{
m
.
status
=
200
m
.
statusText
=
"OK"
}
else
{
m
.
statusText
=
m
.
err
.
Error
()
// 尝试在代理服务请求资源
if
result
,
err
:=
localLoadRes
.
Proxy
.
Send
(
request
);
err
==
nil
{
m
.
bytes
,
m
.
err
=
result
.
Data
,
err
m
.
status
=
result
.
StatusCode
m
.
header
=
result
.
Header
// TODO 需要验证 Content-Type 合法性
if
ct
,
ok
:=
result
.
Header
[
"Content-Type"
];
ok
{
m
.
mimeType
=
ct
[
0
]
}
else
{
m
.
mimeType
=
"text/html"
}
}
else
{
m
.
bytes
=
[]
byte
(
"Invalid resource request"
)
m
.
mimeType
=
"application/json"
m
.
statusText
=
err
.
Error
()
}
}
}
callback
.
Cont
()
return
true
,
true
...
...
@@ -249,8 +259,15 @@ func (m *source) response(response *ICefResponse) (responseLength int64, redirec
response
.
SetMimeType
(
m
.
mimeType
)
responseLength
=
int64
(
len
(
m
.
bytes
))
if
m
.
header
!=
nil
{
header
:=
StringMultiMapRef
.
New
()
if
header
.
IsValid
()
{
for
key
,
value
:=
range
m
.
header
{
response
.
SetHeaderByName
(
key
,
strings
.
Join
(
value
,
","
),
true
)
for
_
,
vs
:=
range
value
{
header
.
Append
(
key
,
vs
)
fmt
.
Println
(
"source response header:"
,
key
,
"="
,
vs
)
}
}
response
.
SetHeaderMap
(
header
)
}
}
return
...
...
cef/local-load-xhr-proxy.go
浏览文件 @
2f541ca4
...
...
@@ -99,7 +99,7 @@ func (m *XHRProxy) sendHttp(request *ICefRequest) (*XHRProxyResponse, error) {
}
postData
.
Free
()
}
logger
.
Debug
(
"XHRProxy TargetURL:"
,
targetUrl
.
String
(),
"dataLength:"
,
len
(
requestData
.
Bytes
()))
logger
.
Debug
(
"XHRProxy TargetURL:"
,
targetUrl
.
String
(),
"
method:"
,
request
.
Method
(),
"
dataLength:"
,
len
(
requestData
.
Bytes
()))
httpRequest
,
err
:=
http
.
NewRequest
(
request
.
Method
(),
targetUrl
.
String
(),
requestData
)
if
err
!=
nil
{
return
nil
,
err
...
...
@@ -116,7 +116,7 @@ func (m *XHRProxy) sendHttp(request *ICefRequest) (*XHRProxyResponse, error) {
for
j
:=
0
;
j
<
int
(
c
);
j
++
{
value
:=
header
.
GetEnumerate
(
key
,
uint32
(
j
))
httpRequest
.
Header
.
Add
(
key
,
value
)
fmt
.
Println
(
"XHRProxy
header:"
,
key
,
"="
,
value
)
fmt
.
Println
(
"XHRProxy
Request header:"
,
key
,
"="
,
value
,
"url:"
,
targetUrl
.
String
()
)
}
}
header
.
Free
()
...
...
@@ -132,13 +132,14 @@ func (m *XHRProxy) sendHttp(request *ICefRequest) (*XHRProxyResponse, error) {
defer
httpResponse
.
Body
.
Close
()
// 读取响应头
responseHeader
:=
make
(
map
[
string
][]
string
)
for
k
,
v
:=
range
httpResponse
.
Header
{
for
_
,
vs
:=
range
v
{
if
header
,
ok
:=
responseHeader
[
k
];
ok
{
responseHeader
[
k
]
=
append
(
header
,
vs
)
for
k
ey
,
value
:=
range
httpResponse
.
Header
{
for
_
,
vs
:=
range
v
alue
{
if
header
,
ok
:=
responseHeader
[
k
ey
];
ok
{
responseHeader
[
k
ey
]
=
append
(
header
,
vs
)
}
else
{
responseHeader
[
k
]
=
[]
string
{
vs
}
responseHeader
[
k
ey
]
=
[]
string
{
vs
}
}
fmt
.
Println
(
"XHRProxy response header:"
,
key
,
"="
,
vs
,
"url:"
,
targetUrl
.
String
())
}
}
// 读取响应数据
...
...
@@ -150,6 +151,7 @@ func (m *XHRProxy) sendHttp(request *ICefRequest) (*XHRProxyResponse, error) {
StatusCode
:
int32
(
httpResponse
.
StatusCode
),
Header
:
responseHeader
,
}
fmt
.
Println
(
"XHRProxy response result:"
,
result
.
DataSize
,
result
.
StatusCode
,
"url:"
,
targetUrl
.
String
())
return
result
,
nil
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录