【五、http】go的http的信息提交

编程入门 行业动态 更新时间:2024-10-26 18:26:54

【五、http】go的http的<a href=https://www.elefans.com/category/jswz/34/1770440.html style=信息提交"/>

【五、http】go的http的信息提交

一、post提交的几种

  • form表单
  • json
  • 文件

1、提交表单

//http的postfunc requstPost(){params := make(url.Values)params.Set("name", "kaiyue")params.Set("age", "18")formDataStr := []byte(params.Encode())formDataByte := bytes.NewBuffer(formDataStr)requst, err := http.NewRequest(http.MethodPost, "", formDataByte)if err != nil {fmt.Println("ss")}requst.URL.RawQuery = params.Encode()r, err := http.DefaultClient.Do(requst)if err != nil {fmt.Println("ss")}defer r.Body.Close()printBody(r)
}

2、提交json

func postJson(){u := struct {Name string `json:"name"`Age int `json:"age"`}{Name: "kaiyue",Age: 18,}payload, _ := json.Marshal(u)r, _ := http.Post("","application/x-www-form-urlencoded",bytes.NewReader(payload),)defer r.Body.Close()content, _ := io.ReadAll(r.Body)fmt.Printf("%s\n", content)
}func main() {postJson()
}

结果:

{"args": {}, "data": "", "files": {}, "form": {"{\"name\":\"kaiyue\",\"age\":18}": ""}, "headers": {"Accept-Encoding": "gzip", "Content-Length": "26", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin", "User-Agent": "Go-http-client/1.1", "X-Amzn-Trace-Id": "Root=1-6544fb3a-777a0c6563dee4ad74037aeb"}, "json": null, "origin": "120.244.60.192", "url": ""
}

3、提交文件

package mainimport ("bytes""encoding/json""fmt""io""io/ioutil""mime/multipart""net/http""net/url""os""strings"
)func postForm() {// form data 形式 query string,类似于 name=poloxue&age=18data := make(url.Values)data.Add("name", "poloxue")data.Add("age", "18")payload := data.Encode()r, _ := http.Post("","application/x-www-form-urlencoded",strings.NewReader(payload),)defer func() { _ = r.Body.Close() }()content, _ := ioutil.ReadAll(r.Body)fmt.Printf("%s", content)
}func postJson() {u := struct {Name string `json:"name"`Age  int    `json:"age"`}{Name: "poloxue",Age:  18,}payload, _ := json.Marshal(u)r, _ := http.Post("","application/json",bytes.NewReader(payload),)defer func() { _ = r.Body.Close() }()content, _ := ioutil.ReadAll(r.Body)fmt.Printf("%s", content)
}func postFile() {body := &bytes.Buffer{}writer := multipart.NewWriter(body)_ = writer.WriteField("words", "123")// 一个是输入表单的 name,一个上传的文件名称upload1Writer, _ := writer.CreateFormFile("uploadfile1", "uploadfile1")uploadFile1, _ := os.Open("uploadfile1")defer func() {_ = uploadFile1.Close()}()_, _ = io.Copy(upload1Writer, uploadFile1)// 一个是输入表单的 name,一个上传的文件名称upload2Writer, _ := writer.CreateFormFile("uploadfile2", "uploadfile2")uploadFile2, _ := os.Open("uploadfile2")defer func() {_ = uploadFile2.Close()}()_, _ = io.Copy(upload2Writer, uploadFile2)_ = writer.Close()fmt.Println(writer.FormDataContentType())fmt.Println(body.String())r, _ := http.Post("",writer.FormDataContentType(),body,)defer func() {_ = r.Body.Close()}()content, _ := ioutil.ReadAll(r.Body)fmt.Printf("%s", content)
}func main() {// post 请求的本质,它是 request body 提交,相对于 get 请求(urlencoded 提交查询参数, 提交内容有大小限制,好像 2kb)// post 不同的形式也就是 body 的格式不同// post form 表单,body 就是 urlencoded 的形式,比如 name=poloxue&age=18// post json,提交的 json 格式// post 文件,其实也是组织 body 数据// postJson()postFile()
}

其中
uploadfile1 中的内容为 abc
uploadfile2 中的内容为 abc

结果:

multipart/form-data; boundary=a7c095e326382b46f363a6fa2d579ea3c02245a6a8368969a37ddfb50dd2
--a7c095e326382b46f363a6fa2d579ea3c02245a6a8368969a37ddfb50dd2
Content-Disposition: form-data; name="words"123
--a7c095e326382b46f363a6fa2d579ea3c02245a6a8368969a37ddfb50dd2
Content-Disposition: form-data; name="uploadfile1"; filename="uploadfile1"
Content-Type: application/octet-streamabc--a7c095e326382b46f363a6fa2d579ea3c02245a6a8368969a37ddfb50dd2
Content-Disposition: form-data; name="uploadfile2"; filename="uploadfile2"
Content-Type: application/octet-streamabc--a7c095e326382b46f363a6fa2d579ea3c02245a6a8368969a37ddfb50dd2--{"args": {}, "data": "", "files": {"uploadfile1": "abc\n", "uploadfile2": "abc\n"}, "form": {"words": "123"}, "headers": {"Accept-Encoding": "gzip", "Content-Length": "559", "Content-Type": "multipart/form-data; boundary=a7c095e326382b46f363a6fa2d579ea3c02245a6a8368969a37ddfb50dd2", "Host": "httpbin", "User-Agent": "Go-http-client/1.1", "X-Amzn-Trace-Id": "Root=1-6544fc1a-3104d8a606a4510d6a68fcde"}, "json": null, "origin": "120.244.60.192", "url": ""
}

更多推荐

【五、http】go的http的信息提交

本文发布于:2023-11-30 10:12:09,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1649617.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:信息   http

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!