panghu před 8 měsíci
rodič
revize
2d724bd9c4
2 změnil soubory, kde provedl 235 přidání a 0 odebrání
  1. 189 0
      pkg/http/request.go
  2. 46 0
      pkg/utils/utils.go

+ 189 - 0
pkg/http/request.go

@@ -0,0 +1,189 @@
+package http
+
+import (
+	"bytes"
+	"encoding/json"
+	"fmt"
+	"io"
+	"net/http"
+	"net/url"
+	"strings"
+)
+
+type RequestData struct {
+	Url      *url.URL
+	Data     url.Values
+	DataByte []byte
+	Header   map[string]string
+}
+
+func (r *RequestData) SetHeader(key string, value string) {
+	if r.Header == nil {
+		r.Header = make(map[string]string)
+	}
+	r.Header[key] = value
+}
+
+func (r *RequestData) SetData(key string, value string) {
+	if r.Data == nil {
+		r.Data = url.Values{}
+	}
+	r.Data.Set(key, value)
+}
+
+func (r *RequestData) ConstructRequest(_URL string) error {
+	_url, err := url.Parse(_URL)
+	if err != nil {
+		return err
+	}
+	r.Url = _url
+	return nil
+
+}
+
+// get请求
+
+func (r *RequestData) GetRequest() ([]byte, error) {
+	if r.Data != nil {
+		r.Url.RawQuery = r.Data.Encode()
+	}
+
+	req, err := http.NewRequest("GET", r.Url.String(), nil)
+	if err != nil {
+		fmt.Println(err)
+		return nil, err
+	}
+
+	// 设置请求头信息,指定内容类型和长度
+	req.Header.Set("Content-Type", "application/json")
+	if r.Header != nil {
+		for k, v := range r.Header {
+			req.Header.Set(k, v)
+		}
+	}
+
+	// 执行请求
+	client := &http.Client{}
+	resp, err := client.Do(req)
+	fmt.Println(r.Url.String())
+	if err != nil {
+		// fmt.Println("请求失败:", err)
+		return nil, err
+	}
+	defer func(Body io.ReadCloser) {
+		err := Body.Close()
+		if err != nil {
+
+		}
+	}(resp.Body)
+	// 读取响应内容
+	body, err := io.ReadAll(resp.Body)
+	if err != nil {
+		fmt.Println("读取响应失败:", err)
+		return nil, err
+	}
+	//fmt.Println("响应内容:", string(body))
+	//var person interface{}
+	//err = json.Unmarshal(body, &person)
+	//if err != nil {
+	//	log.Fatalf("JSON Unmarshal error: %v", err)
+	//}
+	// 输出响应内容
+	return body, nil
+}
+
+// post请求
+
+func (r *RequestData) PostJsonRequest() ([]byte, error) {
+	if r.DataByte == nil {
+		postBody, _ := json.Marshal(r.Data)
+		r.DataByte = postBody
+	}
+	// 将数据转换为字节序列
+	requestBody := bytes.NewBuffer(r.DataByte)
+	// 创建请求
+	req, err := http.NewRequest("POST", r.Url.String(), requestBody)
+	if err != nil {
+		fmt.Println(err)
+		return nil, err
+	}
+
+	// 设置请求头信息,指定内容类型和长度
+	req.Header.Set("Content-Type", "application/json")
+	req.Header.Set("Content-Length", fmt.Sprintf("%d", requestBody.Len()))
+	if r.Header != nil {
+		for k, v := range r.Header {
+			req.Header.Set(k, v)
+		}
+	}
+
+	// 执行请求
+	client := &http.Client{}
+	resp, err := client.Do(req)
+	if err != nil {
+		fmt.Println(err)
+		return nil, err
+	}
+	defer func(Body io.ReadCloser) {
+		err := Body.Close()
+		if err != nil {
+
+		}
+	}(resp.Body)
+
+	// 读取响应体
+	body, err := io.ReadAll(resp.Body)
+	if err != nil {
+		fmt.Println(err)
+		return nil, err
+	}
+
+	return body, nil
+}
+
+func (r *RequestData) PostUrlencodedRequest() ([]byte, error) {
+	//payload := io.Reader{}
+	//payload := strings.Reader{}
+	var payload io.Reader
+	if r.DataByte == nil {
+		dataString := r.Data.Encode()
+		payload = strings.NewReader(dataString)
+	} else {
+		payload = bytes.NewBuffer(r.DataByte)
+	}
+
+	// 创建请求
+	req, err := http.NewRequest("POST", r.Url.String(), payload)
+	if err != nil {
+		fmt.Println(err)
+		return nil, err
+	}
+	// 设置请求头信息,指定内容类型和长度
+	req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
+	if r.Header != nil {
+		for k, v := range r.Header {
+			req.Header.Set(k, v)
+		}
+	}
+	// 执行请求
+	client := &http.Client{}
+	resp, err := client.Do(req)
+	if err != nil {
+		fmt.Println(err)
+		return nil, err
+	}
+	defer func(Body io.ReadCloser) {
+		err := Body.Close()
+		if err != nil {
+
+		}
+	}(resp.Body)
+	// 读取响应体
+	body, err := io.ReadAll(resp.Body)
+	if err != nil {
+		fmt.Println(err)
+		return nil, err
+
+	}
+	return body, nil
+}

+ 46 - 0
pkg/utils/utils.go

@@ -0,0 +1,46 @@
+package utils
+
+import (
+	"crypto/rand"
+	"math/big"
+	"regexp"
+	"strconv"
+	"sync"
+)
+
+// Utils 工具单例
+type Utils struct{}
+
+var (
+	instance *Utils
+	once     sync.Once
+)
+
+// GetUtils  获取单例实例
+func GetUtils() *Utils {
+	once.Do(func() {
+		instance = &Utils{}
+	})
+	return instance
+}
+
+// VerifyPhone 验证手机号是否正确
+func (u *Utils) VerifyPhone(phone string) bool {
+	// 示例:中国大陆手机号(1开头,11位)
+	reg := regexp.MustCompile(`^1[3-9]\d{9}$`)
+	return reg.MatchString(phone)
+}
+
+// GetFourRandomDigits 获取4位随机数字
+func (u *Utils) GetFourRandomDigits() string {
+
+	// 生成 [0, 8999] 的安全随机数
+	n, err := rand.Int(rand.Reader, big.NewInt(9000))
+	if err != nil {
+		return ""
+	}
+
+	// 转换为 1000~9999 范围
+	randomNum := n.Int64() + 1000
+	return strconv.FormatInt(randomNum, 10)
+}