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 }