- 在 main.go 中恢复了 traceRouter 的初始化代码,确保追踪功能正常工作 - 在 trace.go 中将追踪提供者设置为 noop,清理了不必要的代码注释 - 在 client.go 中更新了日志记录方式,使用 traceRouter.Logger 记录请求地址,提升了日志的上下文信息
82 lines
2.0 KiB
Go
82 lines
2.0 KiB
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"io"
|
|
"net/http"
|
|
"net/url"
|
|
"shop/internal/traceRouter"
|
|
"time"
|
|
|
|
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
|
|
"go.uber.org/zap"
|
|
|
|
"github.com/beego/beego/v2/client/httplib"
|
|
)
|
|
|
|
type Response struct {
|
|
Msg string `json:"msg"`
|
|
Code int `json:"code"`
|
|
Data any `json:"data"`
|
|
}
|
|
|
|
// Get 发送get请求
|
|
func Get(ctx context.Context, baseUrl string, params map[string]string) (result string, err error) {
|
|
urlParams := url.Values{}
|
|
for k, v := range params {
|
|
urlParams.Add(k, v)
|
|
}
|
|
realUrl, err := url.Parse(baseUrl)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
realUrl.RawQuery = urlParams.Encode()
|
|
traceRouter.Logger.WithContext(ctx).Info("请求地址", zap.String("url", realUrl.String()))
|
|
req, err := http.NewRequestWithContext(context.WithoutCancel(ctx), "GET", realUrl.String(), nil)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
// 设置请求头
|
|
req.Header.Set("tokenFrom", "iframe")
|
|
//设置trace
|
|
client := http.Client{}
|
|
client.Timeout = time.Second * 30
|
|
client.Transport = otelhttp.NewTransport(http.DefaultTransport)
|
|
resp, err := client.Do(req)
|
|
if resp != nil {
|
|
b, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return string(b), nil
|
|
}
|
|
return "", err
|
|
}
|
|
|
|
func Post(ctx context.Context, baseUrl string, params map[string]string, data map[string]interface{}) (result string, err error) {
|
|
ctx, span := traceRouter.CreateSpan(context.WithoutCancel(ctx), "通讯", "Post")
|
|
defer span.End()
|
|
urlParams := url.Values{}
|
|
for k, v := range params {
|
|
urlParams.Add(k, v)
|
|
}
|
|
realUrl, err := url.Parse(baseUrl)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
realUrl.RawQuery = urlParams.Encode()
|
|
req := httplib.NewBeegoRequestWithCtx(ctx, realUrl.String(), "POST")
|
|
req.SetTransport(otelhttp.NewTransport(http.DefaultTransport))
|
|
req.SetTimeout(30*time.Second, 30*time.Second)
|
|
_, _ = req.JSONBody(data)
|
|
response, err := req.String()
|
|
return response, err
|
|
}
|
|
|
|
func Unmarshal(s string) (Response, error) {
|
|
var r Response
|
|
err := json.Unmarshal([]byte(s), &r)
|
|
return r, err
|
|
}
|