http提交数据次要通过post办法实现,在提交不同格局的数据时最大的不同点在于数据的组织模式不同,同时须要设置不同格局对应的Content-type格局
package mainimport ( "bytes" "encoding/json" "fmt" "io" "io/ioutil" "mime/multipart" "net/http" "net/url" "os" "strings")func postForm(){ data := make(url.Values) data.Add("name", "yuan") data.Add("age", "18") payload := data.Encode() resp, err := http.Post("http://httpbin.org/post", "application/x-www-form-urlencoded", strings.NewReader(payload)) if err != nil { panic(err) } defer func() {_ = resp.Body.Close()}() content, err := ioutil.ReadAll(resp.Body) fmt.Printf("%s", content) //{ // "args": {}, // "data": "", // "files": {}, // "form": { // "age": "18", // "name": "yuan" // }, // "headers": { // "Accept-Encoding": "gzip", // "Content-Length": "16", // "Content-Type": "application/x-www-form-urlencoded", // "Host": "httpbin.org", // "User-Agent": "Go-http-client/1.1", // "X-Amzn-Trace-Id": "Root=1-60e4770f-2a5448187a3ae2d560ebf3ff" // }, // "json": null, // "origin": "222.211.214.252", // "url": "http://httpbin.org/post" //}}func postJson() { u := struct { Name string `json:"name"` Age int `json:"age"` }{ Name: "yuan", Age: 18, } payload, _ := json.Marshal(u) //data := make(url.Values) //data.Add("name", "yuan") //data.Add("age", "18") //payload := data.Encode() resp, err := http.Post("http://httpbin.org/post", "application/json", bytes.NewReader(payload)) if err != nil { panic(err) } defer func() { _ = resp.Body.Close() }() content, err := ioutil.ReadAll(resp.Body) fmt.Printf("%s", content) //{ // "args": {}, // "data": "{\"name\":\"yuan\",\"age\":18}", // "files": {}, // "form": {}, // "headers": { // "Accept-Encoding": "gzip", // "Content-Length": "24", // "Content-Type": "application/json", // "Host": "httpbin.org", // "User-Agent": "Go-http-client/1.1", // "X-Amzn-Trace-Id": "Root=1-60e47872-48e5cb7c65ce959f03544ffb" //}, // "json": { // "age": 18, // "name": "yuan" //}, // "origin": "222.211.214.252", // "url": "http://httpbin.org/post" //}}func postFile(){ body := &bytes.Buffer{} writer := multipart.NewWriter(body) upload1, _ := writer.CreateFormFile("formName1", "test.txt") uploadFile1, _:= os.Open("test.txt") defer uploadFile1.Close() io.Copy(upload1, uploadFile1) upload2, _ := writer.CreateFormFile("formName2", "test.txt") uploadFile2, _:= os.Open("test.txt") defer uploadFile2.Close() io.Copy(upload2, uploadFile2) writer.Close() //以上数据组织实现 fmt.Println(writer.FormDataContentType()) resp, err := http.Post("http://httpbin.org/post", writer.FormDataContentType(), body) if err != nil { panic(err) } defer func() {_ = resp.Body.Close()}() content, _ := ioutil.ReadAll(resp.Body) fmt.Printf("%s", content) //{ // "args": {}, // "data": "", // "files": { // "formName1": "qwqwertwertwertwert", // "formName2": "qwqwertwertwertwert" // }, // "form": {}, // "headers": { // "Accept-Encoding": "gzip", // "Content-Length": "462", // "Content-Type": "multipart/form-data; boundary=c7d43bcbc370e8f128df077361e7f5551970ee279eb483fc4c1a7016e68f", // "Host": "httpbin.org", // "User-Agent": "Go-http-client/1.1", // "X-Amzn-Trace-Id": "Root=1-60e4806a-501ee1f8562afc5c74143bcf" // }, // "json": null, // "origin": "222.211.214.252", // "url": "http://httpbin.org/post" //}}func main(){ //postForm() //post 表单 //postJson() //post Json postFile() //post file}