func (r *request) WithContentType(ct string) Request {
	r.WithHeader("Content-Type", ct)
	return r
}
WithContentType adds the ContentType header information of the current request.
package requester
import (
	"bytes"
	"context"
	"encoding"
	"encoding/json"
	"encoding/xml"
	"errors"
	"fmt"
	"io"
	"mime/multipart"
	"net/http"
	"net/url"
	"os"
	"path/filepath"
	"sort"
	"strings"
	"time"
	"github.com/edoger/zkits-requester/internal"
)
var (
	ErrEmptyRequestURL = errors.New("empty request url")
	ErrInvalidRequestBody = errors.New("invalid request body")
	ErrEmptyUploadBody = errors.New("empty upload body")
	ErrInvalidUploadBody = errors.New("invalid upload body")
)
type Request interface {
	WithMethod(string) Request
	WithResponder(Responder) Request
	WithHeader(string, string) Request
	WithHeaderValue(string, interface{}) Request
	WithContentType(string) Request
	WithHeaders(http.Header) Request
	WithContext(context.Context) Request
	WithQuery(string, string) Request
	WithQueryValue(string, interface{}) Request
	WithQueries(url.Values) Request
	WithTimeout(time.Duration) Request
	WithBody(interface{}) Request
	WithJSONBody(interface{}) Request
	WithRawJSONBody([]byte) Request
	WithXMLBody(interface{}) Request
	WithRawXMLBody([]byte) Request
	WithFormBody(url.Values) Request
	WithFormBodyMap(body map[string]interface{}) Request
	Head() (Response, error)
	Get() (Response, error)
	Post() (Response, error)
	Send() (Response, error)
	SendBy(string) (Response, error)
	WithFormDataField(string, interface{}) Request
	WithFormDataFields(fields map[string]interface{}) Request
	WithFormDataFile(string, interface{}) Request
	WithFormDataFileFromReader(string, string, io.Reader) Request
	ClearFormData() Request
	Upload() (Response, error)
	UploadBy(string) (Response, error)
	Clear() Request
}
type request struct {
	client       *client
	uri          string
	method       string
	headers      http.Header
	ctx          context.Context
	query        url.Values
	timeout      time.Duration
	responder    Responder
	body         interface{}
	bodyFormData map[string][]*formDataValue
	bodyEncoder  string
	bodyType     string
}
type formDataValue struct {
	field string
	file  interface{}
}
func (r *request) WithMethod(method string) Request {
	r.method = method
	return r
}
func (r *request) WithResponder(responder Responder) Request {
	r.responder = responder
	return r
}
func (r *request) WithHeader(key, value string) Request {
	if value == "" {
		if len(r.headers) > 0 {
			r.headers.Del(key)
		}
		return r
	}
	if r.headers == nil {
		r.headers = make(http.Header, 1)
	}
	r.headers.Set(key, value)
	return r
}
func (r *request) WithHeaderValue(key string, value interface{}) Request {
	return r.WithHeader(key, internal.ToString(value))
}