golang通用的http client


type ApiInfoReq struct {
	Method string `json:"method"`
	Url string `json:"url"`
	Data []byte `json:"data"`
	Header map[string]interface{} `json:"header"`
	Cookies map[string]string `json:"cookies"`
}

type ApiInfoResp struct {
	StatusCode int `json:"status_code"`
	Body []byte `json:"body"`
	Ttlb float64 `json:"ttlb"`
	SetCookie map[string]string `json:"set_cookie"`
	Err error `json:"err"`
}

func ApiRequest(apiInfoReq *ApiInfoReq) (apiInfoResp *ApiInfoResp) {
	startTime := time.Now()
	apiInfoResp = new(ApiInfoResp)
	var req*http.Request
	req,apiInfoResp.Err = http.NewRequest(apiInfoReq.Method,apiInfoReq.Url,bytes.NewReader(apiInfoReq.Data))
	if apiInfoResp.Err!=nil{

	}
	for k,v:=range apiInfoReq.Header {
		vString,ok:=v.(string)
		if !ok {

		}
		req.Header.Add(k,vString)
	}

	for k,v :=range apiInfoReq.Cookies {
		cookie:=&http.Cookie{
			Name: k,
			Value: v,
		}
		req.AddCookie(cookie)
	}

	var resp*http.Response
	resp,apiInfoResp.Err = client.Do(req)
	defer resp.Body.Close()
	
	apiInfoResp.StatusCode = resp.StatusCode
	respCookies := resp.Cookies()
	for _,v:=range respCookies {
		if apiInfoResp.SetCookie == nil{
			apiInfoResp.SetCookie = make(map[string]string,len(respCookies))
		}
		apiInfoResp.SetCookie[v.Name] = v.Value
	}
	apiInfoResp.Ttlb = time.Now().Sub(startTime).Seconds()
	apiInfoResp.Body,apiInfoResp.Err = ioutil.ReadAll(resp.Body)
	if apiInfoResp.Err != nil {
		
	}
	return 
}


func InitHttpClient() {
	transport := &http.Transport{
		Proxy: http.ProxyFromEnvironment,
		DialContext: (&net.Dialer{
			Timeout:   60 * time.Second,
			KeepAlive: 60 * time.Second,
			DualStack: true,
		}).DialContext,
		MaxIdleConns:          500,
		IdleConnTimeout:       90 * time.Second,
		TLSHandshakeTimeout:   10 * time.Second,
		ExpectContinueTimeout: 10 * time.Second,
		TLSClientConfig:       &tls.Config{InsecureSkipVerify: true},
	}
	client = &http.Client{
		Transport: transport,
		Timeout:   options.OptTimeOut,
	}
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值