Ai
1 Star 1 Fork 1

xiaoyutab/xgotool

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
hook.go 2.39 KB
一键复制 编辑 原始数据 按行查看 历史
package https
import (
"fmt"
"net/http/cookiejar"
"net/url"
"time"
)
// 请求开始前的钩子操作
func (c *CURL) hookBefore() *CURL {
if c == nil {
c = &CURL{
Error: fmt.Errorf("http实例未正常初始化"),
}
}
c.
headerDefault("accept", _default.AC). // 设置默认请求头 Accept 内容类型
headerDefault("Content-Type", _default.CT). // 设置默认请求头 ContentType 内容类型
headerDefault("accept-language", _default.ACL). // 设置默认请求头 Accept-Language 语言
headerDefault("accept-encoding", "gzip, deflate, br"). // 设置默认请求头 Accept-Encoding 支持的压缩方式
headerDefault("user-agent", _default.UA) // 设置默认请求头 User-Agent 浏览器标识
// 缓存判定,如果存在缓存的话就直接追加响应值,且配置error错误对象
ck, err := url.QueryUnescape(_default.cacheInterface.Get(c.getKey()))
if err == nil && ck != "" {
c.Body = ck
c.option.cacheHit = true
}
return c
}
// 设置header默认值,且配置该值忽略日志记录
//
// k header下标
// v 下标值
func (c *CURL) headerDefault(k, v string) *CURL {
// 追加Header请求头
if _, ok := c.HeaderQuest[k]; !ok {
c.HeaderQuest[k] = v
// 判断忽略参数里有无此head头
for i := 0; i < len(c.option.ignoreHeader); i++ {
if c.option.ignoreHeader[i] == k {
return c
}
}
c.option.ignoreHeader = append(c.option.ignoreHeader, k)
}
return c
}
// 请求结束的钩子操作
func (c *CURL) hookEnd() *CURL {
c.EndTime = time.Now()
// 记录缓存
if c.option.cacheTime > 0 {
// 将Body进行 url.QueryEscape 编码,避免中间出现"导致redis存储失败
_default.cacheInterface.Set(c.getKey(), url.QueryEscape(c.Body), c.option.cacheTime)
}
// 移除忽略的请求头信息
for i := 0; i < len(c.option.ignoreHeader); i++ {
delete(c.HeaderQuest, c.option.ignoreHeader[i])
}
// 如果设置了日志记录并且未命中缓存,则调用日志函数进行对应记录
if !c.option.noLog && !c.option.cacheHit {
// 记录日志
for i := 0; i < len(_default.LogFunc); i++ {
_default.LogFunc[i](c)
}
}
return c
}
// 获取cookie的jar信息
func getJar() *cookiejar.Jar {
if !_default.saveCookie {
return nil
}
if _default.jar != nil {
return _default.jar
}
jar, err := cookiejar.New(nil)
if err != nil {
return nil
}
_default.jar = jar
return jar
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/xiaoyutab/xgotool.git
git@gitee.com:xiaoyutab/xgotool.git
xiaoyutab
xgotool
xgotool
v0.3.64

搜索帮助