http tool get
This commit is contained in:
parent
2302aa7ff8
commit
21a4ff3b3e
|
@ -126,3 +126,11 @@ func FileExist(path string) bool {
|
||||||
_, err := os.Stat(path)
|
_, err := os.Stat(path)
|
||||||
return err == nil
|
return err == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetAnyVal[T any](v any, defaults T) T {
|
||||||
|
vv, ok := v.(T)
|
||||||
|
if !ok {
|
||||||
|
return defaults
|
||||||
|
}
|
||||||
|
return vv
|
||||||
|
}
|
||||||
|
|
|
@ -267,3 +267,16 @@ func TestGetValFromContext(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetAnyVal(t *testing.T) {
|
||||||
|
t.Run("string", func(t *testing.T) {
|
||||||
|
want := "string"
|
||||||
|
if got := GetAnyVal(any("string"), "s"); !reflect.DeepEqual(got, want) {
|
||||||
|
t.Errorf("GetAnyVal() = %v, want %v", got, want)
|
||||||
|
}
|
||||||
|
want = "s"
|
||||||
|
if got := GetAnyVal(any(1), "s"); !reflect.DeepEqual(got, want) {
|
||||||
|
t.Errorf("GetAnyVal() = %v, want %v", got, want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
69
helper/httptool/http.go
Normal file
69
helper/httptool/http.go
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
package httptool
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetString(u string, q map[string]string, timeout int64, a ...any) (r string, code int, err error) {
|
||||||
|
res, err := Get(u, q, timeout, a...)
|
||||||
|
if res != nil {
|
||||||
|
code = res.StatusCode
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
|
||||||
|
return "", code, err
|
||||||
|
}
|
||||||
|
defer res.Body.Close()
|
||||||
|
rr, err := io.ReadAll(res.Body)
|
||||||
|
if err != nil {
|
||||||
|
return "", code, err
|
||||||
|
}
|
||||||
|
r = string(rr)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func Get(u string, q map[string]string, timeout int64, a ...any) (res *http.Response, err error) {
|
||||||
|
parse, err := url.Parse(u)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
cli := http.Client{
|
||||||
|
Timeout: time.Duration(timeout) * time.Second,
|
||||||
|
}
|
||||||
|
values := parse.Query()
|
||||||
|
for k, v := range q {
|
||||||
|
values.Add(k, v)
|
||||||
|
}
|
||||||
|
parse.RawQuery = values.Encode()
|
||||||
|
req := http.Request{
|
||||||
|
Method: "GET",
|
||||||
|
URL: parse,
|
||||||
|
}
|
||||||
|
if len(a) > 0 {
|
||||||
|
for _, arg := range a {
|
||||||
|
h, ok := arg.(map[string]string)
|
||||||
|
if ok && len(h) > 0 {
|
||||||
|
for k, v := range h {
|
||||||
|
req.Header.Add(k, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
t, ok := arg.(time.Duration)
|
||||||
|
if ok {
|
||||||
|
cli.Timeout = t
|
||||||
|
}
|
||||||
|
checkRedirect, ok := arg.(func(req *http.Request, via []*http.Request) error)
|
||||||
|
if ok {
|
||||||
|
cli.CheckRedirect = checkRedirect
|
||||||
|
}
|
||||||
|
jar, ok := arg.(http.CookieJar)
|
||||||
|
if ok {
|
||||||
|
cli.Jar = jar
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res, err = cli.Do(&req)
|
||||||
|
return
|
||||||
|
}
|
51
helper/httptool/http_test.go
Normal file
51
helper/httptool/http_test.go
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
package httptool
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGetString(t *testing.T) {
|
||||||
|
type args struct {
|
||||||
|
u string
|
||||||
|
q map[string]string
|
||||||
|
timeout int64
|
||||||
|
a []any
|
||||||
|
}
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
args args
|
||||||
|
wantR string
|
||||||
|
wantCode int
|
||||||
|
wantErr bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "wp.test",
|
||||||
|
args: args{
|
||||||
|
u: "http://wp.test",
|
||||||
|
q: map[string]string{
|
||||||
|
"p": "2",
|
||||||
|
"XDEBUG_SESSION_START": "34343",
|
||||||
|
},
|
||||||
|
timeout: 3,
|
||||||
|
},
|
||||||
|
wantR: `{"XDEBUG_SESSION_START":"34343","p":"2"}`,
|
||||||
|
wantCode: 200,
|
||||||
|
wantErr: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
gotR, gotCode, err := GetString(tt.args.u, tt.args.q, tt.args.timeout, tt.args.a...)
|
||||||
|
if (err != nil) != tt.wantErr {
|
||||||
|
t.Errorf("GetString() error = %v, wantErr %v", err, tt.wantErr)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if gotR != tt.wantR {
|
||||||
|
t.Errorf("GetString() gotR = %v, want %v", gotR, tt.wantR)
|
||||||
|
}
|
||||||
|
if gotCode != tt.wantCode {
|
||||||
|
t.Errorf("GetString() gotCode = %v, want %v", gotCode, tt.wantCode)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user