func HandleResp (ctx *gin.Context, apiInfo models.ApiInfo) error{ var buf bytes.Buffer reqbody,err := ioutil.ReadAll(ctx.Request.Body) //fmt.Println("ctx.Params: ",ctx.Params) //fmt.Println("reqbody: ",string(reqbody)) //fmt.Println("ctx.Request.Header: ",ctx.Request.Header) //fmt.Println("ctx.Request.PostForm: ",ctx.Request.PostForm) //fmt.Println("ctx.Request.URL.Query(): ",ctx.Request.URL.Query()) //HEADER数据结构转换成map headMap := make(map[string] string) for k,v := range ctx.Request.Header { headMap[k] = strings.Join(v,",") } //转换reqbody jsonMap := make(map[string]interface{}) formMap := make(map[string]interface{}) if strings.ToLower(headMap["Content-Type"]) == "application/json" { err = json.Unmarshal(reqbody, &jsonMap) if err != nil { return err } }else if strings.ToLower(headMap["Content-Type"]) == "application/x-www-form-urlencoded" { formList := strings.Split(string(reqbody),"&") for _,formItem := range formList { if formItem == "" { continue } formItemList := strings.Split(formItem,"=") formkey,_ := url.QueryUnescape(formItemList[0]) formValue,_ := url.QueryUnescape(formItemList[1]) formMap[formkey] = formValue } } //转换ctx.Request.URL.Query() queryMap := make(map[string]interface{}) for k1,v1 := range ctx.Request.URL.Query() { queryMap[k1] = strings.Join(v1,",") } //转换path pathMap := make(map[string]interface{}) for _,paramItem := range ctx.Params { pathMap[paramItem.Key] = paramItem.Value } if int64(apiInfo.SuccPercents) > rand.Int63n(100) { ctx.Status(apiInfo.SuccStatusCode) tmplSucc,err := template.New("succdata").Parse(apiInfo.SuccData) if err != nil { return err } err = tmplSucc.Execute(&buf, map[string] interface{}{ "Header": headMap, "Query": queryMap, "Path": pathMap, "JsonBody": jsonMap, "FormBody": formMap, }) if err != nil { return err } respBody := buf.String() respMap := make(map[string]interface{}) err = json.Unmarshal([]byte(respBody),&respMap) if err != nil { ctx.String(apiInfo.SuccStatusCode,respBody) }else { ctx.JSON(apiInfo.SuccStatusCode,respMap) } } else { // 失败时返回 ctx.Status(apiInfo.FailStatusCode) tmplFail,err := template.New("succdata").Parse(apiInfo.FailData) if err != nil { return err } err = tmplFail.Execute(&buf, map[string] interface{}{ "Header": headMap, "Query": queryMap, "Path": pathMap, "JsonBody": jsonMap, "FormBody": formMap, }) if err != nil { return err } respBody := buf.String() respMap := make(map[string]interface{}) err1 := json.Unmarshal([]byte(respBody),&respMap) if err1 != nil { ctx.String(apiInfo.FailStatusCode,respBody) }else { ctx.JSON(apiInfo.FailStatusCode,respMap) } } return nil }