|
|
@@ -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
|
|
|
+}
|