feat: 更新配置结构,添加 BaseURL、ContentType 和 CommonQuery 字段

This commit is contained in:
Rogee
2025-09-11 16:44:59 +08:00
parent 5fc12743c3
commit 42214ee821
2 changed files with 133 additions and 39 deletions

View File

@@ -1,6 +1,8 @@
package req package req
import ( import (
"context"
"io"
"net/http" "net/http"
"net/url" "net/url"
"os" "os"
@@ -9,7 +11,7 @@ import (
"strings" "strings"
"time" "time"
"{{.ModuleName}}/providers/req/cookiejar" "test/providers/req/cookiejar"
"github.com/imroc/req/v3" "github.com/imroc/req/v3"
"go.ipao.vip/atom/container" "go.ipao.vip/atom/container"
@@ -65,6 +67,9 @@ func Provide(opts ...opt.Option) error {
if config.UserAgent != "" { if config.UserAgent != "" {
client.SetUserAgent(config.UserAgent) client.SetUserAgent(config.UserAgent)
} }
if config.BaseURL != "" {
client.SetBaseURL(config.BaseURL)
}
if config.Timeout > 0 { if config.Timeout > 0 {
client.SetTimeout(time.Duration(config.Timeout) * time.Second) client.SetTimeout(time.Duration(config.Timeout) * time.Second)
} }
@@ -72,6 +77,12 @@ func Provide(opts ...opt.Option) error {
if config.CommonHeaders != nil { if config.CommonHeaders != nil {
client.SetCommonHeaders(config.CommonHeaders) client.SetCommonHeaders(config.CommonHeaders)
} }
if config.CommonQuery != nil {
client.SetCommonQueryParams(config.CommonQuery)
}
if config.ContentType != "" {
client.SetCommonContentType(config.ContentType)
}
if config.AuthBasic.Username != "" && config.AuthBasic.Password != "" { if config.AuthBasic.Username != "" && config.AuthBasic.Password != "" {
client.SetCommonBasicAuth(config.AuthBasic.Username, config.AuthBasic.Password) client.SetCommonBasicAuth(config.AuthBasic.Username, config.AuthBasic.Password)
@@ -90,6 +101,9 @@ func Provide(opts ...opt.Option) error {
} }
c.client = client c.client = client
if c.jar != nil {
container.AddCloseAble(func() { _ = c.jar.Save() })
}
return c, nil return c, nil
}, o.DiOptions()...) }, o.DiOptions()...)
} }
@@ -129,6 +143,10 @@ func (c *Client) R() *req.Request {
return c.client.R() return c.client.R()
} }
func (c *Client) RWithCtx(ctx context.Context) *req.Request {
return c.client.R().SetContext(ctx)
}
func (c *Client) SaveCookJar() error { func (c *Client) SaveCookJar() error {
return c.jar.Save() return c.jar.Save()
} }
@@ -150,3 +168,76 @@ func (c *Client) AllCookiesKV() map[string]string {
func (c *Client) SetCookie(u *url.URL, cookies []*http.Cookie) { func (c *Client) SetCookie(u *url.URL, cookies []*http.Cookie) {
c.jar.SetCookies(u, cookies) c.jar.SetCookies(u, cookies)
} }
func (c *Client) DoJSON(ctx context.Context, method, url string, in any, out any) error {
r := c.RWithCtx(ctx)
if in != nil {
r.SetBody(in)
}
if out != nil {
r.SetSuccessResult(out)
}
var resp *req.Response
var err error
switch strings.ToUpper(method) {
case http.MethodGet:
resp, err = r.Get(url)
case http.MethodPost:
resp, err = r.Post(url)
case http.MethodPut:
resp, err = r.Put(url)
case http.MethodPatch:
resp, err = r.Patch(url)
case http.MethodDelete:
resp, err = r.Delete(url)
default:
resp, err = r.Send(method, url)
}
if err != nil {
return err
}
return resp.Err
}
func (c *Client) GetJSON(ctx context.Context, url string, out any, query map[string]string) error {
r := c.RWithCtx(ctx)
if query != nil {
r.SetQueryParams(query)
}
r.SetSuccessResult(out)
resp, err := r.Get(url)
if err != nil {
return err
}
return resp.Err
}
func (c *Client) PostJSON(ctx context.Context, url string, in any, out any) error {
r := c.RWithCtx(ctx)
if in != nil {
r.SetBody(in)
}
if out != nil {
r.SetSuccessResult(out)
}
resp, err := r.Post(url)
if err != nil {
return err
}
return resp.Err
}
func (c *Client) Download(ctx context.Context, url, filepath string) error {
r := c.RWithCtx(ctx)
resp, err := r.Get(url)
if err != nil {
return err
}
f, err := os.Create(filepath)
if err != nil {
return err
}
defer f.Close()
_, err = io.Copy(f, resp.Body)
return err
}

View File

@@ -23,6 +23,9 @@ type Config struct {
UserAgent string UserAgent string
InsecureSkipVerify bool InsecureSkipVerify bool
CommonHeaders map[string]string CommonHeaders map[string]string
CommonQuery map[string]string
BaseURL string
ContentType string
Timeout uint Timeout uint
AuthBasic struct { AuthBasic struct {
Username string Username string