Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
energye
energy
提交
45594c72
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,发现更多精彩内容 >>
提交
45594c72
编写于
8月 27, 2023
作者:
yanghye
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改内置资源XHR代理
上级
a25efb17
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
71 addition
and
14 deletion
+71
-14
cef/chromium-callback.go
cef/chromium-callback.go
+4
-2
cef/local-load-resource.go
cef/local-load-resource.go
+67
-12
未找到文件。
cef/chromium-callback.go
浏览文件 @
45594c72
...
...
@@ -335,9 +335,11 @@ func getResourceHandler(browser *ICefBrowser, frame *ICefFrame, request *ICefReq
if
localLoadRes
.
enable
()
{
if
source
,
ok
:=
localLoadRes
.
checkRequest
(
request
);
ok
{
resourceHandler
=
ResourceHandlerRef
.
New
(
browser
,
frame
,
string
(
localLoadRes
.
Scheme
),
request
)
resourceHandler
.
Open
(
source
.
open
)
//resourceHandler.Open(source.open)
resourceHandler
.
ProcessRequest
(
source
.
processRequest
)
resourceHandler
.
GetResponseHeaders
(
source
.
response
)
resourceHandler
.
Read
(
source
.
read
)
//resourceHandler.Read(source.read)
resourceHandler
.
ReadResponse
(
source
.
readResponse
)
}
}
return
...
...
cef/local-load-resource.go
浏览文件 @
45594c72
...
...
@@ -260,13 +260,56 @@ func (m *source) open(request *ICefRequest, callback *ICefCallback) (handleReque
return
true
,
true
}
func
(
m
*
source
)
processRequest
(
request
*
ICefRequest
,
callback
*
ICefCallback
)
bool
{
m
.
readPosition
=
0
// 当前资源的响应设置默认值
m
.
statusCode
=
404
m
.
statusText
=
"Not Found"
m
.
err
=
nil
m
.
header
=
nil
// xhr 请求, 需要通过代理转发出去
if
m
.
resourceType
==
RT_XHR
&&
localLoadRes
.
Proxy
!=
nil
{
if
result
,
err
:=
localLoadRes
.
Proxy
.
Send
(
request
);
err
==
nil
{
m
.
bytes
,
m
.
err
=
result
.
Data
,
err
m
.
statusCode
=
result
.
StatusCode
m
.
statusText
=
result
.
Status
m
.
header
=
result
.
Header
}
}
else
{
// 如果开启缓存,直接在缓存取
m
.
readFile
()
if
m
.
err
==
nil
{
m
.
statusCode
=
200
m
.
statusText
=
"OK"
}
else
if
localLoadRes
.
Proxy
!=
nil
{
// 尝试在代理服务请求资源
if
result
,
err
:=
localLoadRes
.
Proxy
.
Send
(
request
);
err
==
nil
{
m
.
bytes
,
m
.
err
=
result
.
Data
,
err
m
.
statusCode
=
result
.
StatusCode
m
.
statusText
=
result
.
Status
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
}
// checkRequest = true, 设置响应信息
func
(
m
*
source
)
response
(
response
*
ICefResponse
)
(
responseLength
int64
,
redirectUrl
string
)
{
response
.
SetStatus
(
m
.
statusCode
)
response
.
SetStatusText
(
m
.
statusText
)
response
.
SetMimeType
(
m
.
mimeType
)
response
.
SetCharset
(
"UTF-8"
)
response
.
SetURL
(
"fs://energy"
)
responseLength
=
int64
(
len
(
m
.
bytes
))
if
m
.
header
!=
nil
{
header
:=
StringMultiMapRef
.
New
()
...
...
@@ -284,19 +327,31 @@ func (m *source) response(response *ICefResponse) (responseLength int64, redirec
// checkRequest = true, 读取bytes, 返回到dataOut
func
(
m
*
source
)
read
(
dataOut
uintptr
,
bytesToRead
int32
,
callback
*
ICefResourceReadCallback
)
(
bytesRead
int32
,
result
bool
)
{
if
m
.
bytes
!=
nil
&&
len
(
m
.
bytes
)
>
0
{
var
i
int32
=
0
// 默认 0
for
i
<
bytesToRead
&&
m
.
readPosition
<
len
(
m
.
bytes
)
{
*
(
*
byte
)(
unsafe
.
Pointer
(
dataOut
+
uintptr
(
i
)))
=
m
.
bytes
[
m
.
readPosition
]
if
m
.
bytes
!=
nil
{
for
bytesRead
<
bytesToRead
&&
m
.
readPosition
<
len
(
m
.
bytes
)
{
*
(
*
byte
)(
unsafe
.
Pointer
(
dataOut
+
uintptr
(
bytesRead
)))
=
m
.
bytes
[
m
.
readPosition
]
m
.
readPosition
++
i
++
bytesRead
++
}
// 读取到最后不缓存时,清空
if
i
==
0
{
m
.
bytes
=
nil
callback
.
Cont
(
int64
(
bytesRead
))
return
bytesRead
,
bytesRead
>
0
}
else
{
m
.
bytes
=
nil
}
return
}
func
(
m
*
source
)
readResponse
(
dataOut
uintptr
,
bytesToRead
int32
,
callback
*
ICefCallback
)
(
bytesRead
int32
,
result
bool
)
{
if
m
.
bytes
!=
nil
{
for
bytesRead
<
bytesToRead
&&
m
.
readPosition
<
len
(
m
.
bytes
)
{
*
(
*
byte
)(
unsafe
.
Pointer
(
dataOut
+
uintptr
(
bytesRead
)))
=
m
.
bytes
[
m
.
readPosition
]
m
.
readPosition
++
bytesRead
++
}
callback
.
Cont
(
int64
(
i
))
return
i
,
i
>
0
callback
.
Cont
()
return
bytesRead
,
bytesRead
>
0
}
else
{
m
.
bytes
=
nil
}
return
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录