专注于
IT技术和业内交流

GOLANG模拟HTTP的GET和POST请求

在使用go语言进行服务器开发的时候经常会与第三方进行对接,一般使用get和post的时候比较多,下面我就对go语言的http client进行一些关于get post的请求用法:

GET请求:

get请求可以直接http.Get方法,非常简单。没有什么多余的注意点

package main
import (
    "fmt"
    "io/ioutil"
    "net/http"
    "strings"
)

func httpGet() {
    resp, err := http.Get("http://www.baidu.com/")
    if err != nil {
        // handle error
    }
    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)//body 拿到请求返回的内容
    if err != nil {
        // handle error
    }
    fmt.Println(string(body))
    }
func main(){
        httpGet()
}

POST请求:

    package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "net/url"
    "strings"
)

//第一种方法
func httpPost() {
    v := url.Values{}
    v.Add("client_id", "*********")
    v.Add("client_secret", "*********")
    v.Add("grant_type", "*********")
    v.Add("code", "*********")
    v.Add("redirect_uri", "https://api.weibo.com/oauth2/default.html")
    reqest, _ := http.NewRequest("POST", "https://api.weibo.com/oauth2/access_token", strings.NewReader(v.Encode()))

    reqest.Header.Set("Content-Type", "application/x-www-form-urlencoded; param=value") //这个一定要加,不加form的值post不过去,很多人容易被忽略导致请求一直失败
    client := &http.Client{}
    resp, err := client.Do(reqest)       //发送
    defer resp.Body.Close()              //一定要关闭resp.Body
    data, _ := ioutil.ReadAll(resp.Body) //输入的是一个io.Reader元读取器返回的是[]byte字节切片和error
    fmt.Println(string(data), err)
}

//第二种方法
func httpFormPost() {
    reqest, err := http.PostForm("https://api.weibo.com/oauth2/access_token",
        url.Values{"client_id": {" * ********"}, "id": {" * ********"}})

    if err != nil {
        // handle error
    }
    defer reqest.Body.Close()
    body, err := ioutil.ReadAll(reqest.Body)
    if err != nil {
        // handle error
    }

    fmt.Println(string(body))
}

func main() {
    httpPost()
    httpFormPost()
}

以上GET POST都是简单的一些请求方式,还可以设置各种head属性
例如:

    func httpDo() {

    client := &http.Client{}
    reqest, err := http.NewRequest("POST", "http://www.baidu.com/accept.php", strings.NewReader("name=cjb"))
    if err != nil {
        // handle error
    }

    reqest.Header.Set("Content-Type", "application/x-www-form-urlencoded")
    reqest.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))
    }

未经允许,不得转载本站任何文章:代码山 » GOLANG模拟HTTP的GET和POST请求

分享到:更多 ()

专注品牌化高端网站建设

商务服务联系我们