func BodyJSON(v interface{}) *bodyJson {
	return &bodyJson{v: v}
}
BodyJSON make the object be encoded in json format and set it to the request body
package req
import (
	"bytes"
	"compress/gzip"
	"context"
	"encoding/json"
	"encoding/xml"
	"errors"
	"fmt"
	"io"
	"io/ioutil"
	"mime/multipart"
	"net/http"
	"net/textproto"
	"net/url"
	"os"
	"path/filepath"
	"strconv"
	"strings"
	"time"
)
var std = New()
const (
	LreqHead  = 1 << iota  
	LreqBody               
	LrespHead              
	LrespBody              
	Lcost                  
	LstdFlags = LreqHead | LreqBody | LrespHead | LrespBody
)
type Param map[string]interface{}
type QueryParam map[string]interface{}
type Host string
type FileUpload struct {
	FileName string
	FieldName string
	File io.ReadCloser
}
type DownloadProgress func(current, total int64)
type UploadProgress func(current, total int64)
func File(patterns ...string) interface{} {
	matches := []string{}
	for _, pattern := range patterns {
		m, err := filepath.Glob(pattern)
		if err != nil {
			return err
		}
		matches = append(matches, m...)
	}
	if len(matches) == 0 {
		return errors.New("req: no file have been matched")
	}
	uploads := []FileUpload{}
	for _, match := range matches {
		if s, e := os.Stat(match); e != nil || s.IsDir() {
			continue
		}
		file, _ := os.Open(match)
		uploads = append(uploads, FileUpload{
			File:      file,
			FileName:  filepath.Base(match),
			FieldName: "media",
		})
	}
	return uploads
}
type bodyJson struct {
	v interface{}
}
type bodyXml struct {
	v interface{}
}