network/curl/request.go

186 lines
5.0 KiB
Go
Raw Normal View History

2022-05-01 21:49:17 +08:00
// Package curl ...
//
// Author: go_developer@163.com<白茶清欢>
//
// Description:
//
// File: request.go
//
// Version: 1.0.0
//
// Date: 2022/05/01 21:25:03
package curl
import (
2022-05-01 22:21:49 +08:00
"encoding/json"
"fmt"
2022-05-01 21:49:17 +08:00
"net/http"
"strings"
2022-05-01 22:38:31 +08:00
"github.com/ddliu/go-httpclient"
2022-05-01 21:49:17 +08:00
)
// Request 发送请求
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2022/05/01 21:26:02
2022-05-01 22:38:31 +08:00
func Request(apiConfig *ApiRequestConfig, header map[string]string, param map[string]interface{}) *ApiResponse {
2022-05-01 21:49:17 +08:00
apiConfig.Method = strings.ToUpper(apiConfig.Method)
switch apiConfig.Method {
case http.MethodGet:
2022-05-01 22:38:31 +08:00
return GET(apiConfig, header, param)
2022-05-01 21:49:17 +08:00
case http.MethodPost:
2022-05-01 22:38:31 +08:00
return POST(apiConfig, header, param)
2022-05-01 21:49:17 +08:00
case http.MethodPut:
2022-05-01 22:38:31 +08:00
return PUT(apiConfig, header, param)
2022-05-01 21:49:17 +08:00
case http.MethodDelete:
2022-05-01 22:38:31 +08:00
return DELETE(apiConfig, header, param)
2022-05-01 21:49:17 +08:00
case http.MethodConnect:
2022-05-01 22:38:31 +08:00
return Connect(apiConfig, header, param)
2022-05-01 21:49:17 +08:00
case http.MethodOptions:
2022-05-01 22:38:31 +08:00
return OPTION(apiConfig, header, param)
2022-05-01 21:49:17 +08:00
case http.MethodTrace:
2022-05-01 22:38:31 +08:00
return Trace(apiConfig, header, param)
2022-05-01 21:49:17 +08:00
case http.MethodPatch:
2022-05-01 22:38:31 +08:00
return Patch(apiConfig, header, param)
2022-05-01 21:49:17 +08:00
default:
return &ApiResponse{
RequestConfig: apiConfig,
HttpCode: 0,
Body: nil,
BodyType: "",
Exception: NewException(RequestMethodNotSupport, map[string]string{"method": apiConfig.Method}),
}
}
}
// GET ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date: 2022/05/01 21:29:09
2022-05-01 22:38:31 +08:00
func GET(apiConfig *ApiRequestConfig, header map[string]string, param map[string]interface{}) *ApiResponse {
2022-05-01 22:21:49 +08:00
buildRequestURLAndParam(apiConfig, param)
2022-05-01 21:49:17 +08:00
return nil
}
// POST post请求
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2022/05/01 21:31:36
2022-05-01 22:38:31 +08:00
func POST(apiConfig *ApiRequestConfig, header map[string]string, param map[string]interface{}) *ApiResponse {
2022-05-01 22:21:49 +08:00
buildRequestURLAndParam(apiConfig, param)
2022-05-01 21:49:17 +08:00
return nil
}
// PUT put请求
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2022/05/01 21:31:52
2022-05-01 22:38:31 +08:00
func PUT(apiConfig *ApiRequestConfig, header map[string]string, param map[string]interface{}) *ApiResponse {
2022-05-01 22:21:49 +08:00
buildRequestURLAndParam(apiConfig, param)
2022-05-01 21:49:17 +08:00
return nil
}
// DELETE delete请求
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2022/05/01 21:32:08
2022-05-01 22:38:31 +08:00
func DELETE(apiConfig *ApiRequestConfig, header map[string]string, param map[string]interface{}) *ApiResponse {
2022-05-01 22:21:49 +08:00
buildRequestURLAndParam(apiConfig, param)
2022-05-01 21:49:17 +08:00
return nil
}
// OPTION option请求
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2022/05/01 21:32:18
2022-05-01 22:38:31 +08:00
func OPTION(apiConfig *ApiRequestConfig, header map[string]string, param map[string]interface{}) *ApiResponse {
2022-05-01 22:21:49 +08:00
buildRequestURLAndParam(apiConfig, param)
2022-05-01 21:49:17 +08:00
return nil
}
// Patch patch请求
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2022/05/01 21:36:12
2022-05-01 22:38:31 +08:00
func Patch(apiConfig *ApiRequestConfig, header map[string]string, param map[string]interface{}) *ApiResponse {
2022-05-01 22:21:49 +08:00
buildRequestURLAndParam(apiConfig, param)
2022-05-01 21:49:17 +08:00
return nil
}
// Trace trace请求
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2022/05/01 21:36:24
2022-05-01 22:38:31 +08:00
func Trace(apiConfig *ApiRequestConfig, header map[string]string, param map[string]interface{}) *ApiResponse {
2022-05-01 22:21:49 +08:00
buildRequestURLAndParam(apiConfig, param)
2022-05-01 21:49:17 +08:00
return nil
}
// Connect connect请求
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2022/05/01 21:36:39
2022-05-01 22:38:31 +08:00
func Connect(apiConfig *ApiRequestConfig, header map[string]string, param map[string]interface{}) *ApiResponse {
2022-05-01 22:21:49 +08:00
buildRequestURLAndParam(apiConfig, param)
2022-05-01 21:49:17 +08:00
return nil
}
2022-05-01 22:21:49 +08:00
2022-05-01 22:38:31 +08:00
// getHttpClient 获取httpclient实例
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 22:27 2022/5/1
func getHttpClient(apiConfig *ApiRequestConfig, header map[string]string, param map[string]interface{}) *httpclient.HttpClient {
fullHeader := make(map[string]string)
for name, val := range apiConfig.CommonHeader {
fullHeader[name] = val
}
for name, val := range header {
fullHeader[name] = val
}
return httpclient.NewHttpClient().WithHeaders(fullHeader)
}
2022-05-01 22:21:49 +08:00
// buildRequestURLAndParam 构建完整请求URL与请求参数
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 21:55 2022/5/1
func buildRequestURLAndParam(apiConfig *ApiRequestConfig, param map[string]interface{}) {
apiConfig.Method = strings.ToUpper(apiConfig.Method)
formatParam := make(map[string]interface{})
for paramName, paramValue := range param {
uriTemplate := "{" + paramName + "}"
if strings.Contains(apiConfig.URI, uriTemplate) {
apiConfig.URI = strings.ReplaceAll(apiConfig.URI, uriTemplate, fmt.Sprintf("%v", paramValue))
continue
}
formatParam[paramName] = paramValue
}
apiConfig.Parameter = formatParam
paramPair := make([]string, 0)
switch apiConfig.Method {
case http.MethodPost:
apiConfig.Body, _ = json.Marshal(formatParam)
default:
for paramName, paramValue := range formatParam {
paramPair = append(paramPair, fmt.Sprintf("%v=%v", paramName, paramValue))
}
if len(paramPair) > 0 {
apiConfig.URI = apiConfig.URI + "?" + strings.Join(paramPair, "&")
}
}
apiConfig.FullURL = strings.ReplaceAll(apiConfig.Domain+"/"+apiConfig.URI, "//", "/")
}