func (c *client) New(uri string) Request {
	return &request{client: c, uri: uri}
}
New returns a new request instance from the given uri.
package requester
import (
	"net/http"
	"net/url"
	"sync"
	"time"
)
var requestPool = sync.Pool{New: func() interface{} { return new(request) }}
type Client interface {
	SetHTTPClient(*http.Client) Client
	SetTimeout(time.Duration) Client
	GetCommonHeaders() http.Header
	SetCommonHeader(string, string) Client
	SetCommonHeaders(http.Header) Client
	SetResponder(Responder) Client
	New(string) Request
	Do(string, func(Request) (Response, error)) (Response, error)
	Head(string, url.Values) (Response, error)
	Get(string, url.Values) (Response, error)
	Post(string, interface{}) (Response, error)
	PostJSON(string, interface{}) (Response, error)
	PostXML(string, interface{}) (Response, error)
	PostForm(string, url.Values) (Response, error)
	UploadFile(string, string, interface{}) (Response, error)
}
func New() Client {
	return &client{headers: make(http.Header)}
}
type client struct {
	http      *http.Client
	timeout   time.Duration
	headers   http.Header
	responder Responder
}
func (c *client) SetHTTPClient(client *http.Client) Client {
	c.http = client
	return c
}
func (c *client) SetTimeout(t time.Duration) Client {
	c.timeout = t
	return c
}
func (c *client) GetCommonHeaders() http.Header {
	return c.headers
}
func (c *client) SetCommonHeader(key, value string) Client {
	if value == "" {
		if len(c.headers) > 0 {
			c.headers.Del(key)
		}
		return c
	}
	c.headers.Set(key, value)
	return c
}
func (c *client) SetCommonHeaders(headers http.Header) Client {
	if headers == nil {
		c.headers = make(http.Header)
	} else {
		c.headers = headers.Clone()
	}
	return c
}
func (c *client) SetResponder(responder Responder) Client {
	c.responder = responder
	return c
}