在Go語言里,標(biāo)準(zhǔn)庫里面已經(jīng)提供了很完整的net/http包了,很多Go語言框架的也是基于該包進(jìn)行封裝的酬核。
HTTP客戶端
1.基本方法
Go語言在Client端的請求方法已經(jīng)實(shí)現(xiàn)了一個(gè)默認(rèn)的Client于颖,即DefaultClient邻遏,當(dāng)我們只需要調(diào)用基本的Http操作畏腕,不需要自己在進(jìn)行一層封裝添加其他東西時(shí),則Go語言里面會調(diào)用該默認(rèn)Client的Http方法
// DefaultClient is the default Client and is used by Get, Head, and Post.
var DefaultClient = &Client{}
下面橘券,介紹一下這些基本的Client端的方法
·http.Get()
// 在Go里面的實(shí)現(xiàn)(采用默認(rèn)的Client調(diào)用)
func Get(url string) (resp *Response, err error)
{
return DefaultClient.Get(url)
}
例子
resp, err := http.Get("http://www.baidu.com")
if err != nil
{
????return
}
defer resp.Body.Close() io.Copy(os.Stdout, resp.Body)
·http.Post()
func Post(url string, contentType string, body io.Reader) (resp *Response, err error) {
? ??return DefaultClient.Post(url, contentType, body)
}
例子
resp, err := http.Post("http://www.maimaiche.com/loginRegister/login.do", "application/x-www-form-urlencoded", strings.NewReader("mobile=xxxxxxxxxx&isRemberPwd=1"))
if err != nil
{
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return
}
fmt.Println(string(body))
·http.PostForm()
PostForm實(shí)現(xiàn)了編碼為application/x-www-form-urlencoded的表單提交额湘。
func PostForm(url string, data url.Values) (resp *Response, err error)
{
????return DefaultClient.PostForm(url, data)
}
例子:
postParam := url.Values{ "mobile": {"xxxxx"}, "isRemberPwd": {1}, }
resp, err := http.PostForm("http://www.maimaiche.com/loginRegister/login.do", postParam)
if err != nil
{
return
}
defer resp.Body.Close()
body, err :=ioutil.ReadAll(resp.Body)
if err != nil
{
return
}
fmt.Println(string(body))
·http.Head()
Head只獲取請求的url的頭部數(shù)據(jù)
func Head(url string) (resp *Response, err error)
{
????return DefaultClient.Head(url)
}
// head實(shí)現(xiàn)卿吐,實(shí)際上也是調(diào)用了Do方法
func (c *Client) Head(url string) (resp *Response, err error)
{
????req, err := NewRequest("HEAD", url, nil)
????if err != nil
{
????return nil, err
}
return c.Do(req)
·http.Do()
當(dāng)上面的方法不滿足需求時(shí),比如想自定義頭部锋华,傳遞cookie時(shí)嗡官,則就需要使用http的Do方法了
req, err := http.NewRequest("GET", "http://baidu.com", nil)
if err != nil
{ return }
req.Header.Add("User-Agent","I am sean")
client := &http.Client{}
resp ,err := client.Do(req)
if err != nil
{ fmt.Println(string(resp.Body)) }
在這一篇,就先這樣講一下Go語言中關(guān)于http的基礎(chǔ)用法吧毯焕,關(guān)于Go的高級用法衍腥,下次再續(xù),謝謝纳猫。
參考:《Go語言編程》