https

package
v0.3.58 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 28, 2025 License: BSD-3-Clause-Clear Imports: 22 Imported by: 0

README

网址请求增强包

功能

  • 支持自定义请求头
  • 支持自定义请求超时时间
  • 支持请求错误重试
  • 支持请求重定向
  • 支持请求日志
  • 支持请求的前/后钩子处理
  • 支持请求缓存
  • 支持分组并发请求
  • 支持直接下载文件
  • 支持上传文件
  • 支持缓存自定义
  • 支持https请求不验证证书

使用

package main

import (
	"fmt"
	"github.com/xiaoyutab/xgotool/https"
)

func main() {
    // 基础配置项,用于处理请求的基础信息表述

    // 设置是否存储 cookie 默认不存储
    https.SetDefaultUnCookieJar(true)

    // 设置 cookie 的存储结构
    https.SetJar(nil)

    // 设置默认的超时时间,针对所有请求均生效
    https.SetDefaultTimeOut(time.Second * 10)

    // 设置默认的缓存实现,需要实现 https.CacheInterface 接口
    https.SetDefaultCacheFunc(nil)

    // 设置默认的缓存时间,针对所有请求均生效,所以一般不建议配置此值
    https.SetDefaultCacheTime(time.Second * 3)

    // 设置默认请求头
    https.SetDefaultAc("") // 设置请求头 access
    https.SetDefaultUA("") // 设置请求头 user-agent
    https.SetDefaultCT("") // 设置请求头 content-type
    https.SetDefaultAcL("") // 设置请求头 access-language

    // 日志回调函数,用于记录请求日志
    // 此请求会在请求全都完成后才会调用,可用于记录请求日志
    // 多次调用会设置多个日志回调钩子
    // 如果触发了缓存命中,则不会触发日志记录
    https.SetQuestLog(func(c *https.CURL) {})

    // 设置请求前的钩子处理,一般用于token验证;此处传入了空域名,表示验证所有请求
	// 第一个参数为域名参数
	// 传入空字符串``、`*` 均表示所有请求均走此处理函数
	https.SetBeforeHook("", func(c *https.CURL) {
		if len(c.URI) <= 4 || (len(c.URI) > 4 && c.URI[:4] == "http") {
			// 未使用http开头,即不是完整的域名
			c.URI = "http://xiaoyutab.cn/" + c.URI
		}
	})

    // 请求后钩子处理,可用于请求结果的处理(一般用于处理200状态下的统计返回结果,此处以code进行示例)
    https.SetAfterHook("xiaoyutab.cn", func(c *https.CURL) {
        // 定义临时结构体,解析返回结果(建议将此结构体定义于外部,此处定义内部仅作为举例示意)
		type temp_struct struct {
			Code int    `json:"code"`
			Flag bool   `json:"flag"`
			Msg  string `json:"msg"`
			Data any    `json:"data"`
		}
        temp := temp_struct{}
        // 解析返回结果
        err := json.Unmarshal([]byte(c.Body), &temp)
        if err != nil {
            c.Error = fmt.Errorf("解析返回结果失败:%w", err)
            return 
        }
        if temp.Code!= 0 {
            c.Error = fmt.Errorf("请求失败:%s", temp.Msg)
            return 
        }
        // 处理返回结果
        b,_ := json.Marshal(temp.Data)
        c.Body = string(b)
    })

	// 创建请求对象
	err := https.New("https://www.baidu.com").
        HeaderKV("content-type", "application/json").// 设置header请求头
        Header(map[string]string{
			"Authorization": "Bearer 1234567890",
		}). // 批量设置header头信息
        WithOption(
            https.WithTimeOut(time.Second * 10), // 设置请求超时时间
            https.WithCache(time.Second*10), // 设置请求缓存时间,0-不缓存(默认)
            https.WithRetry("", ""), // 错误重试,第一个参数为重试依然失败的回调网址,第二个参数为验证body中的信息包含
            https.WithContext(context.Background()),// 请求上下文控制,可用于超时、取消请求等,用于配合其他程序的并发处理
            https.WithHttpsContinue(), // 支持https请求的证书跳过
            https.WithCookie(nil),// 使用自定义的 cookie-jar 组件
            https.WithNoLog(), // 不记录请求日志(https请求日志会统一记录在外部)
        ).// 增强功能插入
        Get().
        Replace("","").// 请求结果替换,第一个参数为需要替换的字符串,第二个参数为替换后的字符串(此方法为直接替换curl.Body字符串,需要在请求完成后执行)
        Json() // 直接解析到JSON对象中
}

Documentation

Overview

HTTPS请求-带缓存、选项的V2版

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ClearQuestLog added in v0.2.39

func ClearQuestLog()

清除Quest请求日志记录的函数列表

func Gatway

func Gatway(h http.Handler, intef GatwayInterface) http.Handler

网址转发操作【此操作暂不支持通配网址信息】

h	原始请求处理器
intef	网址转发配置

func QueryJsonString added in v0.2.92

func QueryJsonString(outs []byte, path ...string) ([]byte, error)

将结果返回的JSON字符串进行转化、提取成指定路径的JSON字符串

outs	待截取的JSON字符串
path	截取下标,如果是列表类型的话,需要拼成字符串类型再行读取,如"0"、"1"等

func SetAfterHook added in v0.2.94

func SetAfterHook(domain string, f func(c *CURL))

设置请求后的钩子函数

domain	域名
f	请求后的钩子函数

func SetBeforeHook added in v0.2.94

func SetBeforeHook(domain string, f func(c *CURL))

设置请求前的钩子函数

domain	域名
f	请求前的钩子函数

func SetDefaultAc added in v0.2.94

func SetDefaultAc(ac string)

设置默认的accept请求头

ac	AC请求头

func SetDefaultAcl added in v0.2.94

func SetDefaultAcl(al string)

设置默认的accept-language请求头

al	待设置的请求头

func SetDefaultCacheFunc added in v0.2.39

func SetDefaultCacheFunc(t CacheInterface)

设置缓存信息

t	实现缓存方法的接口信息

func SetDefaultCacheTime added in v0.2.39

func SetDefaultCacheTime(t time.Duration)

设置默认的缓存时间 不建议设置此值,若确实需要缓存的话,建议针对URL地址进行配置缓存时间

t	缓存时间

func SetDefaultCt added in v0.2.94

func SetDefaultCt(ct string)

设置默认的Content-Type请求头

ct	Content-Type请求头

func SetDefaultTimeOut added in v0.2.39

func SetDefaultTimeOut(t time.Duration)

设置默认的超时时间

t	超时时间

func SetDefaultUa added in v0.2.94

func SetDefaultUa(ua string)

设置默认的user-agent请求头

ua	UA请求头

func SetDefaultUnCookieJar added in v0.2.41

func SetDefaultUnCookieJar(s bool)

设置默认是否存储cookie

s	是否存储cookie值,默认存储,可以使用此方法跳过cookie的存储

func SetJar added in v0.2.41

func SetJar(jar *cookiejar.Jar)

设置cookie存储的jar信息

jar	存储的jar信息,默认为nil,nil会获取新的cookiejar.New的jar结构体

func SetQuestLog added in v0.2.39

func SetQuestLog(f func(c *CURL))

设置Quest请求日志

f	日志记录函数【此函数会记录多个,所以请勿一直调用SetQuestLog进行插入日志记录函数】

Types

type CURL

type CURL struct {
	URI            string            `json:"uri"`         // 请求网址
	ParamQuest     map[string]string `json:"param"`       // 请求参数
	HttpCode       int               `json:"http_code"`   // HTTP返回的code值
	ParamJsonQuest map[string]any    `json:"param_json"`  // JSON推送参数
	Body           string            `json:"body"`        // 返回值
	Error          error             `json:"error"`       // 错误信息
	HeaderQuest    map[string]string `json:"header"`      // 请求Header头
	CreateTime     time.Time         `json:"create_time"` // 实例创建时间
	StartTime      time.Time         `json:"start_time"`  // 请求开始时间
	EndTime        time.Time         `json:"end_time"`    // 请求结束时间
	OverTime       time.Time         `json:"over_time"`   // JSON提取结束时间
	ClientIP       string            `json:"client_ip"`   // 请求的客户端IP【兼容日志处理模块的预留字段】
	CookieQuest    []string          `json:"cookie"`      // HTTP网址返回的Set-Cookie相应头
	Version        float64           `json:"version"`     // HTTP返回的Header头中的版本信息
	// contains filtered or unexported fields
}

网址服务对象

func New added in v0.2.39

func New(uri string, opts ...OptionFunc) *CURL

声明URL请求结构信息

uri		要请求的网址信息
opts	可选参数,针对此网址进行的配置项追加

func (*CURL) AddFile added in v0.2.70

func (c *CURL) AddFile(form_name, file_name string) *CURL

添加待上传的文件

form_name	form表单名
file_name	文件原始路径

func (*CURL) AddFileByte added in v0.2.70

func (c *CURL) AddFileByte(form_name string, file_byte []byte) *CURL

添加待上传的文件-以字节流的形式进行添加 PS: 因暂未找到直接写入字节流的形式上传,所以此函数调用了临时文件进行写入,然后再请求的时候进行读取,效率会稍有降低,建议正常上传时直接读取文件进行上传

form_name	form表单名
file_byte	文件字节流

func (*CURL) Authorization added in v0.2.39

func (c *CURL) Authorization(token string) *CURL

追加Header请求头信息

token	JWT编码的Token加密信息

func (*CURL) Cookie added in v0.2.39

func (c *CURL) Cookie() []*http.Cookie

获取域名下的cookie信息 如果使用了jar进行cookie管理,会直接返回jar中该域名下的cookie 如果未使用jar进行管理,则会获取CookieQuest的值,然后使用;=进行分割,以提取其中的key/value值 响应的,如果未使用jar进行管理,此处会手动循环cookie中的值进行strings切分,所以此处速度会稍慢一些

func (*CURL) Download added in v0.2.39

func (c *CURL) Download(file string) *CURL

下载文件,将请求的内容保存到本地

file	保存文件名

func (*CURL) DownloadIO added in v0.2.39

func (c *CURL) DownloadIO(f io.Writer) *CURL

下载文件到对外IO中进行重定向

f	写入对象的IO方法

func (*CURL) Get added in v0.2.39

func (c *CURL) Get() *CURL

使用GET请求 此处仅能使用 `Param` 进行设置请求参数

func (*CURL) Header

func (c *CURL) Header(h map[string]string) *CURL

设置Header请求头

h	header请求头的键值对信息

func (*CURL) HeaderKV added in v0.2.39

func (c *CURL) HeaderKV(k, v string) *CURL

设置Header请求头

k	header下标
v	header下标对应的值

func (*CURL) Json

func (curl *CURL) Json(obj any, first ...string) error

获取JSON中的数据

obj			要获取的obj对象,需要提供给json.Unmarshal
first...	simplejson.GetPath传入的string列表

func (*CURL) JsonData

func (curl *CURL) JsonData(obj any) error

获取JSON中的Data对象

obj	要转化的对象,需要在json中的data里面

func (*CURL) Param

func (c *CURL) Param(m map[string]string) *CURL

追加请求参数

m	待追加的参数信息

func (*CURL) ParamJson

func (c *CURL) ParamJson(m map[string]any) *CURL

JSON格式的请求参数追加

m	追加的参数列表(可直接传入map[string]any{"_":xxx}(会在map最外层有且仅有_下标时才会直接取其内容进行传输))

func (*CURL) ParamJsonAny added in v0.2.39

func (c *CURL) ParamJsonAny(m any) *CURL

JSON格式的请求参数追加

m	追加的参数列表(此处为简写map[string]any{"_":any}的写法)

func (*CURL) ParamKV added in v0.2.39

func (c *CURL) ParamKV(k, v string) *CURL

追加请求参数

k	请求参数的参数名
v	请求参数的参数值

func (*CURL) Post added in v0.2.39

func (c *CURL) Post() *CURL

使用POST请求 此处仅能使用 `Param` 进行设置请求参数

func (*CURL) PostJson added in v0.2.39

func (c *CURL) PostJson() *CURL

使用POST请求 此处使用 `ParamJson` 进行设置请求参数,支持使用 `Param` 设置的参数列表

func (*CURL) Replace added in v0.2.92

func (curl *CURL) Replace(old, new string) *CURL

返回值中的字符串替换 此功能会替换 body 内容,请在 GET / POST 之后再行替换

old	待替换内容
new	替换成

func (*CURL) WithOption added in v0.2.39

func (c *CURL) WithOption(opts ...OptionFunc) *CURL

设置Option选项[此参数需要在Get/Post/PostJson之前进行调用,若在之后调用的话会失去作用]

opts	可选参数,针对此网址进行的配置项追加

type CacheInterface added in v0.2.39

type CacheInterface interface {
	Get(name string) string                       // 获取缓存值,缓存未找到的话请返回空字符串
	Set(name string, val string, t time.Duration) // 设置缓存值,可能存在部分无法在string中正常显示的字符串
}

缓存钩子

type GatwayInterface

type GatwayInterface interface {
	// 超时时间
	Timeout() time.Duration

	// 长连接超时时间
	KeepAlive() time.Duration

	// TLS握手超时时间
	TLSHandshakeTimeout() time.Duration

	// 负载均衡的URL列表[此处采用随机的方式进行请求访问]
	Urls() []string

	// 请求的网址信息[可做额外处理,如追加header参数等](此处不建议重写URL)
	// 追加Header方法:request.Header.Set("","")
	QuestUrl(request *http.Request)

	// 响应处理[可做额外处理,如重写返回信息等](socket长连接不支持此方法)
	// 重写方法:将重写结果作为[]byte进行返回(若此值为nul则表示不进行重写)
	ResponseUrl(response *http.Response) ([]byte, error)

	// 错误处理方法
	// 错误回调 :关闭real_server时测试,错误回调
	// 范围:transport.RoundTrip发生的错误、以及ModifyResponse发生的错误
	Error(w http.ResponseWriter, r *http.Request, err error)
}

传入的接口信息,用于处理响应的回调操作

type Option added in v0.2.39

type Option struct {
	// contains filtered or unexported fields
}

外部选项传参结构[可选参数]

type OptionFunc added in v0.2.39

type OptionFunc func(c *Option)

选项设置参数,用于设置本次请求中的选项信息

func WithCache added in v0.2.39

func WithCache(t time.Duration) OptionFunc

设置缓存时间

t	设置缓存时间,0表示不设置缓存

func WithContext added in v0.2.94

func WithContext(ctx context.Context) OptionFunc

使用context.Context来控制进程请求

ctx	控制请求的context结构

func WithCookie added in v0.2.41

func WithCookie(jar *cookiejar.Jar) OptionFunc

使用不同的cookiejar包

jar	存储cookie的依赖结构[传入nil表示不存储cookie]

func WithHosts added in v0.2.94

func WithHosts(host map[string]string) OptionFunc

导入程序指定的host对(此处的域名、IP对应关系和host文件中的对应关系) 如果host中写入端口的话,域名和IP都需要对应上端口才行,如:"xiaoyutab.cn:443": "120.24.39.208:443"

host	待导入的主机对,格式为   "域名[:端口]": "主机IP[:端口]"

func WithHttpsContinue added in v0.2.39

func WithHttpsContinue() OptionFunc

设置跳过https证书验证

func WithIgnoreHeader added in v0.2.39

func WithIgnoreHeader(k string) OptionFunc

设置忽略header头日志

k	header请求头的下标标识

func WithNoLog added in v0.2.39

func WithNoLog() OptionFunc

设置此记录不记录日志标识

func WithRetry added in v0.2.94

func WithRetry(uri, cnt string) OptionFunc

设置是否启用重试机制 此操作会在请求失败时自动重试,重试次数暂为指定的11次,即共请求12次结果 重试间隔:1s、2s、5s、10s、20s、30s、1min、3min、5min、10min、30min 重试报告不会记录请求日志,也不会使用重试机制,即报告一旦接收失败,则此次报告不会再次重传 报告提交: - 成功请求:curl -I -X POST -H "Content-Type: application/json" -d '{"msg": "SUCCESS","report": ["返回的Body内容"]}' <URI> - 失败请求:curl -I -X POST -H "Content-Type: application/json" -d '{"msg": "FAILED", "report": ["网络请求Code返回错误:500"]}' <URI> - 失败+成功请求:curl -I -X POST -H "Content-Type: application/json" -d '{"msg": "ATTEMPTED SUCCESS", "report": ["网络请求Code返回错误:500","返回的Body内容"]}' <URI>

uri	报告URI地址(空则表示不提交错误报告)
cnt	成功的返回内容(空表示只验证http-code在200~299之间,非空则额外验证返回内容包含此内容)

func WithTimeOut added in v0.2.39

func WithTimeOut(t time.Duration) OptionFunc

设置请求的超时时间

t	设置超时时间

type WGroup added in v0.2.55

type WGroup struct {
	HasTimeOut bool    // 是否是超时操作
	Error      []error // 错误信息(只有在AddError以后才能判断此值,否则此值会一直为nil)
	// contains filtered or unexported fields
}

分组请求结构 每个请求组只可运行一次

func Group added in v0.2.55

func Group(fun ...func()) *WGroup

HTTP请求组,将一组HTTP请求放置在一起,进行并发请求,直到最后一个请求完成再往下进行处理 该程序的耗时与传入的具体函数有关,一般情况下比传入的程序的最大耗时再大一些 该方法用于实现比 sync.WaitGroup 更精细的功能,效率比 sync.WaitGroup 稍低

fun	待处理的函数请求

func (*WGroup) Add added in v0.2.55

func (g *WGroup) Add(fun ...func()) *WGroup

添加异步待处理请求

fun	待处理的函数请求

func (*WGroup) AddError added in v0.2.92

func (g *WGroup) AddError(f func() error) *WGroup

添加可以返回错误信息的函数调用

f	带有error返回值的错误信息

func (*WGroup) Run added in v0.2.55

func (g *WGroup) Run() *WGroup

开始执行

func (*WGroup) Times added in v0.2.55

func (g *WGroup) Times() time.Duration

获取请求组运行时间

func (*WGroup) WithContext added in v0.2.92

func (g *WGroup) WithContext(ctx context.Context) *WGroup

设置中控context结构

ctx	中控结构

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL
JackTT - Gopher 🇻🇳