Skip to content

Commit 96f5288

Browse files
committed
fix: payload support io.Reader
1 parent 8afcd02 commit 96f5288

File tree

2 files changed

+36
-25
lines changed

2 files changed

+36
-25
lines changed

method.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
package ghttp
22

3-
const GET = "GET"
4-
const POST = "POST"
3+
import "net/http"
4+
5+
const GET = http.MethodGet
6+
const POST = http.MethodPost

request.go

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package ghttp
22

33
import (
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

6566
func (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.
176185
type Option interface {
177186
Apply(*Request)

0 commit comments

Comments
 (0)