ArcherWong博客
首页
博客
golang笔记---golang发起get和post请求
作者:ArcherWong
分类:golang
时间:2019-01-04 10:34:24
阅读:11
[TOC] # 直接get: ``` func httpGet() { resp, err := http.Get("http://www.01happy.com/demo/accept.php?id=1") if err != nil { // handle error } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { // handle error } fmt.Println(string(body)) } ``` # 直接post: ``` func httpPost() { resp, err := http.Post("http://www.01happy.com/demo/accept.php", "application/x-www-form-urlencoded", strings.NewReader("name=cjb")) if err != nil { fmt.Println(err) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { // handle error } fmt.Println(string(body)) } ``` **注意只要是发送post请求时候请带上Content-Type参数("application/x-www-form-urlencoded")** # 复杂情况: ``` func httpDo() { client := &http.Client{} req, err := http.NewRequest("POST", "http://www.01happy.com/demo/accept.php", strings.NewReader("name=cjb")) if err != nil { // handle error } req.Header.Set("Content-Type", "application/x-www-form-urlencoded") req.Header.Set("Cookie", "name=anny") resp, err := client.Do(req) defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { // handle error } fmt.Println(string(body)) } ``` 生成request时候的参数配置 NewRequest函数有三个基本的参数,NewRequest(method, urlStr string, body io.Reader) - 第一个是请求的类型,GET, POST, PUT, etc.要设成大写的形式。 - 第二个参数是请求要访问的url, - 第三个参数是请求的body中的内容,需要是一个io.Reader的类型。 注意io.Reader的接口中是一个Read方法,实现了Read方法的类型应该都可以作为io.Reader来返回,`Read(p []byte) (n int, err error)`函数具体的功能就是读入len(p)长度的内容到p中,返回读入的长度以及错误信息。 通常是采用strings.NewReader函数,将一个string类型转化为io.Reader类型,或者bytes.NewBuffer函数,将[]byte类型转化为io.Reader类型。 此外还可以给request的header中添加一些额外的信息,比如下面例子中添加了请求的body的类型以及token的信息。 ``` reqest.Header.Set("Content-Type", "application/x-www-form-urlencoded") reqest.Header.Set("Authorization", "qwertyuiopasdfghjklzxcvbnm1234567890") ``` 还有比如模拟表单提交,可以把提交的类型设置为url.Values类型再进行Encode: ``` // use map as struct var clusterinfo = url.Values{} //var clusterinfo = map[string]string{} clusterinfo.Add("userName", user) clusterinfo.Add("password", pw) clusterinfo.Add("cloudName", clustername) clusterinfo.Add("masterIp", masterip) clusterinfo.Add("cacrt", string(caCrt)) data := clusterinfo.Encode() url := "https://10.10.105.124:8443/user/checkAndUpdate" reqest, err := http.NewRequest("POST", url, strings.NewReader(data)) ``` 最常见的一种情况是发送一个json文件过去,可以把Header的类型设置成为: ``` "Content-Type", "application/json; charset=utf-8" ``` 其余的部分按照先前同样的方式进行设置发送提交就好。 生成的response结果的处理 一般在client构建好之后,要采用`client.Do(request)`方法提交client请求,之后会返回一个*Response类型。response中的参数一般也比较多,我们需要的最多的通常是Body参数,一般通过body, _ := ioutil.ReadAll(resp.Body)会把body转化为[]byte类型返回过来, 之后再进行其他的处理。 # 参考 http://www.01happy.com/golang-http-client-get-and-post/ https://studygolang.com/articles/4489
标签:
上一篇:
golang笔记---字符串操作整理
下一篇:
golang笔记---template模板语法
文章分类
css
elasticsearch
git
golang
guacamole
javascript
letsencrypt
linux
nginx
other
php
python
vue
web
阅读排行
编码总结
详解网络连接
tcpdump使用
JWT
websocket协议
友情链接
node文件
laravel-vue
ArcherWong的博客园