Prechádzať zdrojové kódy

update http req & res

Ken 9 hodín pred
rodič
commit
b312024273
1 zmenil súbory, kde vykonal 31 pridanie a 16 odobranie
  1. 31 16
      request.go

+ 31 - 16
request.go

@@ -27,8 +27,18 @@ const (
 	RequestTimeOut = 30
 )
 
+const (
+	// response header Content-Encoding
+	ResContentEncoding = `Content-Encoding`
+
+	// encoding gzip
+	EncodingGZIP = `gzip`
+)
+
 var (
 	reqTimeOut = time.Duration(RequestTimeOut)
+
+	ErrStausCodeNotOk = errors.New(`StatusCode not 200`)
 )
 
 // GetRealIP get real IP from Request
@@ -44,17 +54,24 @@ func SetHTTPRequestTimeout(seconds int) {
 	reqTimeOut = time.Duration(seconds)
 }
 
+// HTTPReqOption request option
+type HTTPReqOption struct {
+}
+
 // HTTPMessage HTTP response
 type HTTPMessage struct {
 	StatusCode int
 	Body       []byte
 	Header     http.Header
+
+	Req *http.Request
+	Res *http.Response
 }
 
 // JSON Body to JSON
 func (m HTTPMessage) JSON(dest interface{}) (err error) {
 	if m.StatusCode != http.StatusOK {
-		err = errors.New(`StatusCode not 200`)
+		err = ErrStausCodeNotOk
 		return
 	}
 	err = json.Unmarshal(m.Body, &dest)
@@ -64,7 +81,7 @@ func (m HTTPMessage) JSON(dest interface{}) (err error) {
 // XML Body to XML
 func (m HTTPMessage) XML(dest interface{}) (err error) {
 	if m.StatusCode != http.StatusOK {
-		err = errors.New(`StatusCode not 200`)
+		err = ErrStausCodeNotOk
 		return
 	}
 	err = xml.Unmarshal(m.Body, &dest)
@@ -74,14 +91,14 @@ func (m HTTPMessage) XML(dest interface{}) (err error) {
 // JSONQuery Body to JSONQuery
 func (m HTTPMessage) JSONQuery() (jq *JSONQuery, err error) {
 	if m.StatusCode != http.StatusOK {
-		err = errors.New(`StatusCode not 200`)
+		err = ErrStausCodeNotOk
 		return
 	}
 	jq, err = NewJSONQuery(m.Body)
 	return
 }
 
-func newRequest(method, uri, certPath, keyPath string, header map[string]string, body io.Reader) (res *http.Response, err error) {
+func newRequest(method, uri, certPath, keyPath string, header map[string]string, body io.Reader) (req *http.Request, res *http.Response, err error) {
 	t := &http.Transport{
 		Dial: func(netw, addr string) (net.Conn, error) {
 			var c net.Conn
@@ -107,7 +124,6 @@ func newRequest(method, uri, certPath, keyPath string, header map[string]string,
 	}
 
 	var (
-		req    *http.Request
 		client = &http.Client{Transport: t}
 	)
 
@@ -124,14 +140,14 @@ func newRequest(method, uri, certPath, keyPath string, header map[string]string,
 	return
 }
 
-func readBody(res *http.Response) (msg HTTPMessage, err error) {
+func readBody(msg *HTTPMessage, res *http.Response) (err error) {
 	var (
 		body   []byte
 		reader io.Reader
 	)
-	encoding := res.Header.Get("Content-Encoding")
+	encoding := res.Header.Get(ResContentEncoding)
 	switch encoding {
-	case "gzip":
+	case EncodingGZIP:
 		reader, err = gzip.NewReader(res.Body)
 		if err == nil {
 			body, err = io.ReadAll(reader)
@@ -151,23 +167,22 @@ func readBody(res *http.Response) (msg HTTPMessage, err error) {
 
 // Post HTTP request POST
 func Post(uri, certPath, keyPath string, header map[string]string, data io.Reader) (msg HTTPMessage, err error) {
-	var res *http.Response
-	if res, err = newRequest("POST", uri, certPath, keyPath, header, data); err != nil {
+	if msg.Req, msg.Res, err = newRequest(http.MethodPost, uri, certPath, keyPath, header, data); err != nil {
 		return
 	}
-	defer res.Body.Close()
-	msg, err = readBody(res)
+	defer msg.Res.Body.Close()
+	err = readBody(&msg, msg.Res)
 	return
 }
 
 // Get HTTP request GET
 func Get(uri, certPath, keyPath string, header map[string]string) (msg HTTPMessage, err error) {
-	var res *http.Response
-	if res, err = newRequest("GET", uri, certPath, keyPath, header, nil); err != nil {
+	//var res *http.Response
+	if msg.Req, msg.Res, err = newRequest(http.MethodGet, uri, certPath, keyPath, header, nil); err != nil {
 		return
 	}
 
-	defer res.Body.Close()
-	msg, err = readBody(res)
+	defer msg.Res.Body.Close()
+	err = readBody(&msg, msg.Res)
 	return
 }