1 Star 0 Fork 0

ltotal / ppw_gin

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
http_client.go 2.54 KB
一键复制 编辑 原始数据 按行查看 历史
ltotal 提交于 2024-03-20 16:32 . 底层优化
package pkg
import (
"context"
"gitee.com/ltotal/traces/sky"
"github.com/SkyAPM/go2sky"
"io"
"net/http"
agentV3 "skywalking.apache.org/repo/goapi/collect/language/agent/v3"
"strconv"
"time"
)
type HttpPkg struct {
}
var Http = &HttpPkg{}
func (p *HttpPkg) Get(c context.Context, link string, timeout int, header map[string]string) (string, error) {
client := http.Client{Timeout: time.Second * time.Duration(timeout)}
var req *http.Request
req, err := http.NewRequest("GET", link, nil)
if err != nil {
return "", err
}
span, err := Tracer.CreateExitSpan(c, ExitSpanOptions{
OperationName: req.URL.Scheme + "://" + req.URL.Host + req.URL.Path,
Component: sky.ComponentIDGINHttpServer,
Peer: req.URL.Host,
Layer: agentV3.SpanLayer_Http,
Injector: func(key, value string) error {
req.Header.Set(key, value)
return nil
},
})
if err == nil {
defer span.End()
}
Tracer.SpanTag(span, go2sky.TagHTTPMethod, req.Method)
Tracer.SpanTag(span, go2sky.TagURL, link)
if header != nil && len(header) > 0 {
for key, value := range header {
req.Header.Add(key, value)
}
}
resp, err := client.Do(req)
if err != nil {
Tracer.SpanErr(span, err.Error())
return "", err
} else {
Tracer.SpanTag(span, go2sky.TagStatusCode, strconv.Itoa(resp.StatusCode))
}
body, _ := io.ReadAll(resp.Body)
_ = resp.Body.Close()
return string(body), nil
}
func (p *HttpPkg) Post(c context.Context, link string, requestBody io.Reader, timeout int, header map[string]string) (string, error) {
client := http.Client{Timeout: time.Second * time.Duration(timeout)}
var req *http.Request
req, err := http.NewRequest("POST", link, requestBody)
if err != nil {
return "", err
}
span, err := Tracer.CreateExitSpan(c, ExitSpanOptions{
OperationName: req.URL.Scheme + "://" + req.URL.Host + req.URL.Path,
Component: sky.ComponentIDGINHttpServer,
Peer: req.URL.Host,
Layer: agentV3.SpanLayer_Http,
Injector: func(key, value string) error {
req.Header.Set(key, value)
return nil
},
})
if err == nil {
defer span.End()
}
Tracer.SpanTag(span, go2sky.TagHTTPMethod, req.Method)
Tracer.SpanTag(span, go2sky.TagURL, link)
if header != nil && len(header) > 0 {
for key, value := range header {
req.Header.Add(key, value)
}
}
resp, err := client.Do(req)
if err != nil {
Tracer.SpanErr(span, err.Error())
return "", err
} else {
Tracer.SpanTag(span, go2sky.TagStatusCode, strconv.Itoa(resp.StatusCode))
}
body, _ := io.ReadAll(resp.Body)
_ = resp.Body.Close()
return string(body), nil
}
1
https://gitee.com/ltotal/ppw_gin.git
git@gitee.com:ltotal/ppw_gin.git
ltotal
ppw_gin
ppw_gin
v0.8.3

搜索帮助