Go Web編程實戰(zhàn)(9)----創(chuàng)建客戶端
目錄
創(chuàng)建一個客戶端
Get()請求
Post()請求
請求頭設(shè)置
創(chuàng)建一個客戶端
在Go語言的net/http包中,還提供了一個被稱為Client的結(jié)構(gòu)體。該結(jié)構(gòu)體提供了Get()、Post()兩個請求函數(shù)。下面,我們來分別使用代碼實現(xiàn)這些請求。
Get()請求
首先,我們來看一下Get()請求函數(shù)的定義,以及其內(nèi)部的調(diào)用邏輯:
func Get(url string) (resp *Response, err error) { return DefaultClient.Get(url) } func (c *Client) Get(url string) (resp *Response, err error) { req, err := NewRequest("GET", url, nil) if err != nil { return nil, err } return c.Do(req) }
1
2
3
4
5
6
7
8
9
10
可以發(fā)現(xiàn),其真實調(diào)用的函數(shù)其實是NewRequest(),其實Post請求也是一樣,之需要將NewRequest()函數(shù)的第一個參數(shù)改為“POST”即可。
下面,我們來實現(xiàn)Get()請求:
package main import ( "fmt" "io/ioutil" "net/http" ) func main() { resp, err := http.Get("https://blog.csdn.net/liyuanjinglyj") if err != nil { fmt.Println(err) } closer := resp.Body bytes, err := ioutil.ReadAll(closer) fmt.Println(string(bytes)) }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
運行之后,控制臺會打印我的CSDN主頁的HTML文檔內(nèi)容。
Post()請求
Post()請求稍微比Get()請求復(fù)雜點,這里我們直接上代碼:
package main import ( bytes2 "bytes" "fmt" "io/ioutil" "net/http" ) func main() { url := "http://httpbin.org/post" body := "{\"name\",\"liyuanjing\",\"age\",29}" response, err := http.Post(url, "application/x-www-form-urlencoded", bytes2.NewBuffer([]byte(body))) if err != nil { fmt.Println(err) } bytes, err := ioutil.ReadAll(response.Body) fmt.Println(string(bytes)) }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
運行之后,控制臺會返回你傳遞的參數(shù)內(nèi)容,這里就不展示了。
當(dāng)然,還有PUT與DELETE請求。不過,在實際的應(yīng)用中比較少,這里直接忽略。
請求頭設(shè)置
在我們進行各種爬蟲以及獲取網(wǎng)頁各種數(shù)據(jù)時,為了偽裝自己是瀏覽器,常常需要設(shè)置各種類型的請求頭。而Go語言給我們提供Header類型。
下面,我們來定義一個User-Agent請求頭,因為我們是自己設(shè)置的Header,所以需要直接使用NewRequest()方法。
package main import ( "fmt" "io/ioutil" "net/http" ) func main() { client := &http.Client{} request, err := http.NewRequest("Get", "https://www.baidu.com/", nil) request.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36") if err != nil { fmt.Println(err) } resp, _ := client.Do(request) closer := resp.Body bytes, err := ioutil.ReadAll(closer) fmt.Println(string(bytes)) defer resp.Body.Close() }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Go web前端
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。