req.go (914B)
1 package httpx 2 3 import ( 4 "bytes" 5 "net/http" 6 ) 7 8 type RequestBuilder struct { 9 err error 10 req *http.Request 11 } 12 13 func Request( 14 method string, 15 url string, 16 body []byte, 17 ) *RequestBuilder { 18 var bodyReader *bytes.Reader 19 20 if body != nil { 21 bodyReader = bytes.NewReader(body) 22 } 23 24 req, err := http.NewRequest(method, url, bodyReader) 25 26 return &RequestBuilder{ 27 err: err, 28 req: req, 29 } 30 } 31 32 func (b *RequestBuilder) WithHeader(key, value string) *RequestBuilder { 33 if b.err != nil { 34 return b 35 } 36 37 b.req.Header.Add(key, value) 38 return b 39 } 40 41 func (b *RequestBuilder) WithHeaders(headers http.Header) *RequestBuilder { 42 if b.err != nil { 43 return b 44 } 45 46 for key, values := range headers { 47 for _, value := range values { 48 b.req.Header.Add(key, value) 49 } 50 } 51 52 return b 53 } 54 55 func (b *RequestBuilder) Do(client *http.Client) (*http.Response, error) { 56 if b.err != nil { 57 return nil, b.err 58 } 59 60 return client.Do(b.req) 61 }