// http客户端接口 // 秒寻科技 // 2024-02-21 // 周涛 package util import ( "bytes" "encoding/json" "errors" "io" "net/http" "net/url" "strings" "time" ) // Get请求 // strUrl:请求地址 // headerMap:请求头参数 // paramMap:参数 // 返回值:字节数组 func GetRequest(strUrl string, headerMap map[string]string, paramMap map[string]string) ([]byte, error) { //指定请求超时时间 client := &http.Client{ Timeout: 5 * time.Second, //5秒超时 } //创建一个http请求 request, err := http.NewRequest(http.MethodGet, strUrl, nil) if err != nil { return nil, err } //添加请求头 request.Header.Add("User-Agent", "chrome") for key, v := range headerMap { request.Header.Add(key, v) } //为请求增加查询参数 params := make(url.Values) for key, v := range paramMap { if v != "" { params.Add(key, v) } } request.URL.RawQuery = params.Encode() //发起请求 resp, err := client.Do(request) if err != nil { return nil, err } defer func() { _ = resp.Body.Close() }() //检查状态码,判断请求是否成功 if resp.StatusCode != 200 { return nil, errors.New("请求执行出错") } //读返回参数 byteList, err := io.ReadAll(resp.Body) if err != nil { return nil, err } return byteList, nil } // Post请求-表单 // strUrl:请求地址 // dataMap:表单数据 // 返回值:[]byte数据切片 func PostRequestForm(strUrl string, dataMap map[string]string) ([]byte, error) { //指定请求超时时间 client := &http.Client{ Timeout: 5 * time.Second, //5秒超时 } data := make(url.Values) for key, v := range dataMap { data.Add(key, v) } payload := data.Encode() //发请求 bodyReader := strings.NewReader(payload) resp, err := client.Post(strUrl, "application/x-www-form-urlencoded", bodyReader) if err != nil { return nil, err } defer func() { _ = resp.Body.Close() }() //检查状态码,判断请求是否成功 if resp.StatusCode != 200 { return nil, errors.New("请求执行出错") } //读取结果 byteList, err := io.ReadAll(resp.Body) if err != nil { return nil, err } return byteList, nil } // Post请求-json // strUrl:请求地址 // dataModel:结构体 // 返回值:[]byte数据切片 func PostRequestJson(strUrl string, dataModel interface{}) ([]byte, error) { //指定请求超时时间 client := &http.Client{ Timeout: 5 * time.Second, //5秒超时 } dataList, err := json.Marshal(dataModel) if err != nil { return nil, err } bodyReader := bytes.NewReader(dataList) //发请求 resp, err := client.Post(strUrl, "application/json", bodyReader) if err != nil { return nil, err } defer func() { _ = resp.Body.Close() }() //检查状态码,判断请求是否成功 if resp.StatusCode != 200 { return nil, errors.New("请求执行出错") } //读取结果 byteList, err := io.ReadAll(resp.Body) if err != nil { return nil, err } return byteList, nil }