@@ -2,6 +2,7 @@ package ghttp
22
33import (
44 "github.com/google/uuid"
5+ "io"
56 "io/ioutil"
67 "net/http"
78 "net/url"
@@ -63,31 +64,15 @@ func (r *Request) Get(uri string, payload interface{}) *Request {
6364}
6465
6566func (r * Request ) Send () (* Response , error ) {
66- params := ""
67+ params , body := r . parsePayload ()
6768
68- switch r .payload .(type ) {
69- case string :
70- params = r .payload .(string )
71- case []byte :
72- params = string (r .payload .([]byte ))
73- case Params :
74- params = r .payload .(Params ).Encode ()
75- case url.Values :
76- params = r .payload .(url.Values ).Encode ()
77- default :
78- }
7969 var request * http.Request
8070 var err error
81- if r .method == GET {
82- url := r .uri
83- if params != "" {
84- url = r .uri + "?" + params
85- }
86- request , err = http .NewRequest (r .method , url , nil )
87- } else {
88- request , err = http .NewRequest (r .method , r .uri , strings .NewReader (params ))
71+ uri := r .uri
72+ if params != "" {
73+ uri = r .uri + "?" + params
8974 }
90-
75+ request , err = http . NewRequest ( r . method , uri , body )
9176 if err != nil {
9277 return nil , err
9378 }
@@ -111,12 +96,12 @@ func (r *Request) Send() (*Response, error) {
11196 }
11297 defer rep .Body .Close ()
11398
114- body , err := ioutil .ReadAll (rep .Body )
99+ respBody , err := ioutil .ReadAll (rep .Body )
115100 if err != nil {
116101 return nil , err
117102 }
118103
119- response := NewResponse (rep , body , time .Now ().Sub (start ))
104+ response := NewResponse (rep , respBody , time .Now ().Sub (start ))
120105
121106 response .RequestId = r .RequestId
122107
@@ -172,6 +157,30 @@ func (r *Request) getClient() *http.Client {
172157 return r .client
173158}
174159
160+ func (r * Request ) parsePayload () (string , io.Reader ) {
161+ var body io.Reader
162+ var params string
163+ switch r .payload .(type ) {
164+ case string :
165+ params = r .payload .(string )
166+ case []byte :
167+ params = string (r .payload .([]byte ))
168+ case Params :
169+ params = r .payload .(Params ).Encode ()
170+ case url.Values :
171+ params = r .payload .(url.Values ).Encode ()
172+ case io.Reader :
173+ body = r .payload .(io.Reader )
174+ }
175+ if r .method == http .MethodGet || r .method == http .MethodHead {
176+ return params , nil
177+ } else if body == nil {
178+ body = strings .NewReader (params )
179+ }
180+
181+ return "" , body
182+ }
183+
175184// An Option configures a Request.
176185type Option interface {
177186 Apply (* Request )
0 commit comments