package bo import ( "bytes" "encoding/json" "fmt" "io" "mime/multipart" "net" "net/url" "os" "strconv" "time" //"fmt" "io/ioutil" "net/http" "strings" ) func Get(url string) (interface{}, error) { //host := controllers.ApiController.set timeout := time.Duration(0 * time.Second) client := http.Client{Timeout: timeout} result, httperr := client.Get(url) if httperr != nil { return nil, httperr } defer result.Body.Close() body, err := ioutil.ReadAll(result.Body) if err != nil { return nil, err } return returnBody(body) } func Post(url string, data interface{}) (interface{}, error) { result, httperr := http.Post(url, "application/json;charset=utf-8", strings.NewReader(data.(string))) if httperr != nil { fmt.Println(url) fmt.Println(data) return nil, httperr } defer result.Body.Close() body, err := ioutil.ReadAll(result.Body) if err != nil { return nil, err } return returnBody(body) } func PostRaw(url string, data interface{}) (interface{}, error) { result, httperr := http.Post(url, "text/plain;charset=utf-8", strings.NewReader(data.(string))) if httperr != nil { fmt.Println(url) fmt.Println(data) return nil, httperr } defer result.Body.Close() body, err := ioutil.ReadAll(result.Body) if err != nil { return nil, err } return returnBody(body) } func PostForm(url string, data url.Values) (interface{}, error) { result, httperr := http.PostForm(url, data) if httperr != nil { fmt.Println(url) fmt.Println(data) return nil, httperr } defer result.Body.Close() body, err := ioutil.ReadAll(result.Body) if err != nil { return nil, err } return returnBody(body) } func PostRawBasicAuth(url string, data interface{}, user string, pwd string) (interface{}, error) { client := http.Client{ Transport: &http.Transport{ Dial: func(netw, addr string) (net.Conn, error) { c, err := net.DialTimeout(netw, addr, time.Second*5) if err != nil { fmt.Println("dail timeout", err) return nil, err } return c, nil }, MaxIdleConnsPerHost: 10, ResponseHeaderTimeout: time.Second * 5, }, } req, _ := http.NewRequest("POST", url, strings.NewReader(data.(string))) req.SetBasicAuth(user, pwd) req.Header.Set("Content-Type", "text/plain;charset=utf-8") result, httperr := client.Do(req) //result, httperr := http.Post(url, "text/plain;charset=utf-8", strings.NewReader(data.(string))) if httperr != nil { fmt.Println(url) fmt.Println(data) return nil, httperr } defer result.Body.Close() body, err := ioutil.ReadAll(result.Body) if err != nil { return nil, err } return returnBody(body) } func Put(url string, data interface{}) (interface{}, error) { req, httperr := http.NewRequest("PUT", url, strings.NewReader(data.(string))) if httperr != nil { return nil, httperr } res, httperr := http.DefaultClient.Do(req) if httperr != nil { return nil, httperr } defer res.Body.Close() body, err := ioutil.ReadAll(res.Body) if err != nil { return nil, err } return returnBody(body) } func Delete(url string) (interface{}, error) { req, httperr := http.NewRequest("DELETE", url, nil) //req.Header.Add("Authorization", "5F6MJ3N2Tk9ruL_6XQpx-uxkkg:o56-nIwtgTzUX80YCNpbcjUL8iM=:eyJyZXNvdXJjZSI6IF9mbG93RGF0YVNvdXJjZTEiLCJleHBpcmVzIjoxNTM2NzU4ODE2LCJjb250ZW50TUQ1IjoiIiwiY29udGVudFR5cGUiOiIiLCJoZWFkZXJzIjoiIiwibWV0aG9kIjoiREVMRVRFIn0=") if httperr != nil { return nil, httperr } res, httperr := http.DefaultClient.Do(req) if httperr != nil { return nil, httperr } defer res.Body.Close() body, httperr := ioutil.ReadAll(res.Body) if httperr != nil { return nil, httperr } return returnBody(body) } func PostFile(targetUrl string, filename string, filed string) (interface{}, error) { bodyBuf := &bytes.Buffer{} bodyWriter := multipart.NewWriter(bodyBuf) //关键的一步操作 fileWriter, err := bodyWriter.CreateFormFile(filed, filename) if err != nil { fmt.Println("error writing to buffer") return nil, err } //打开文件句柄操作 fh, err := os.Open(filename) if err != nil { fmt.Println("error opening file") return nil, err } defer fh.Close() //iocopy _, err = io.Copy(fileWriter, fh) if err != nil { return nil, err } contentType := bodyWriter.FormDataContentType() bodyWriter.Close() resp, err := http.Post(targetUrl, contentType, bodyBuf) if err != nil { return nil, err } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { return nil, err } return returnBody(body) } func Soap11(url string, databody string) (interface{}, error) { reqBody := ` ` + databody + ` ` res, err := http.Post(url, "text/xml; charset=UTF-8", strings.NewReader(reqBody)) if nil != err { fmt.Println("http post err:", err) return nil, err } defer res.Body.Close() // return status if http.StatusOK != res.StatusCode { fmt.Println("WebService soap1.1 request fail, status: %s\n", res.StatusCode) return strconv.Itoa(http.StatusOK), nil } data, err := ioutil.ReadAll(res.Body) if nil != err { fmt.Println("ioutil ReadAll err:", err) return nil, err } return string(data), nil } func Soap12(url string, databody string) (interface{}, error) { reqBody := ` ` + databody + ` ` res, err := http.Post(url, "application/soap+xml; charset=UTF-8", strings.NewReader(reqBody)) if nil != err { fmt.Println("http post err:", err) return nil, err } defer res.Body.Close() // return status if http.StatusOK != res.StatusCode { fmt.Println("WebService soap1.1 request fail, status: %s\n", res.StatusCode) return strconv.Itoa(http.StatusOK), nil } data, err := ioutil.ReadAll(res.Body) if nil != err { fmt.Println("ioutil ReadAll err:", err) return nil, err } return string(data), nil } func returnBody(body []byte) (interface{}, error) { if len(body) == 0 { return "", nil } jsonStr := string(body) firstChar := jsonStr[0:1] if firstChar == "[" || firstChar == "{" { jsondata := make(map[string]interface{}) newStr := `{"a":` + jsonStr + `}` err := json.Unmarshal([]byte(newStr), &jsondata) if err != nil { return jsonStr, err } return jsondata["a"], nil } else { return jsonStr, nil } }