package showapi import ( "encoding/base64" "encoding/json" "errors" "io/ioutil" "net/url" "strconv" "strings" "time" ) type NormalReq struct { url string badyParas url.Values file map[string]string readTimeOut time.Duration connectTimeOut time.Duration headParas url.Values } //用于请求官网 func ShowapiRequest(reqUrl string, appid int, sign string) *NormalReq { values := make(url.Values) values.Set("showapi_appid", strconv.Itoa(appid)) values.Set("showapi_sign", sign) return &NormalReq{reqUrl, values, make(map[string]string), 6 * time.Second, 15 * time.Second, make(url.Values)} } //通用请求 func NormalRequest(reqUrl string) *NormalReq { values := make(url.Values) return &NormalReq{reqUrl, values, make(map[string]string), 3 * time.Second, 15 * time.Second, make(url.Values)} } func (request *NormalReq) AddTextPara(key, value string) { request.badyParas.Set(key, value) } func (request *NormalReq) AddFilePara(key, fileName string) { request.file[key] = fileName } func (request *NormalReq) AddHeadPara(key, value string) { request.headParas.Set(key, value) } func (request *NormalReq) SetReadTimeOut(readTimeOut time.Duration) { request.readTimeOut = readTimeOut } func (request *NormalReq) SetConnectTimeOut(connectTimeOut time.Duration) { request.connectTimeOut = connectTimeOut } //get请求 func (request *NormalReq) Get() (string, error) { req := Get(strings.TrimSpace(request.url) + "?" + request.badyParas.Encode()) req.SetTimeout(request.connectTimeOut, request.readTimeOut) for k, v := range request.headParas { req.Header(k, v[0]) } return req.String() } //post请求包括文件上传部分 func (request *NormalReq) Post() (string, error) { req := Post(strings.TrimSpace(request.url)) for k, v := range request.badyParas { req.Param(k, v[0]) } for k, v := range request.file { req.PostFile(k, v) } req.SetTimeout(request.connectTimeOut, request.readTimeOut) for k, v := range request.headParas { req.Header(k, v[0]) } return req.String() } //获取返回头 //解析json func ParseJson(req string) (map[string]interface{}, error) { var data map[string]interface{} if err := json.Unmarshal([]byte(req), &data); err != nil { return nil, errors.New("showapi return body is nil") } return data, nil } //图片文件传base64 func Base64(fileName string) string { fileBase64, _ := ioutil.ReadFile(fileName) return base64.StdEncoding.EncodeToString(fileBase64) }