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,
}
}