W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
httplib 庫(kù)主要用來(lái)模擬客戶(hù)端發(fā)送 HTTP 請(qǐng)求,類(lèi)似于 Curl 工具,支持 JQuery 類(lèi)似的鏈?zhǔn)讲僮?。使用起?lái)相當(dāng)?shù)姆奖?;通過(guò)如下方式進(jìn)行安裝:
go get github.com/astaxie/beego/httplib
首先導(dǎo)入包
import (
"github.com/astaxie/beego/httplib"
)
然后初始化請(qǐng)求方法,返回對(duì)象
req := httplib.Get("http://beego.me/")
然后我們就可以獲取數(shù)據(jù)了
str, err := req.String()
if err != nil {
t.Fatal(err)
}
fmt.Println(str)
httplib 包里面支持如下的方法返回 request 對(duì)象:
可以根據(jù)上面五個(gè)方法返回的對(duì)象進(jìn)行調(diào)試信息的輸出:
req.Debug(true)
這樣就可以看到請(qǐng)求數(shù)據(jù)的詳細(xì)輸出
httplib.Get("http://beego.me/").Debug(true).Response()
//輸出數(shù)據(jù)如下
GET / HTTP/0.0
Host: beego.me
User-Agent: beegoServer
如果請(qǐng)求的網(wǎng)站是 HTTPS 的,那么我們就需要設(shè)置 client 的 TLS 信息,如下所示:
req.SetTLSClientConfig(&tls.Config{InsecureSkipVerify: true})
關(guān)于如何設(shè)置這些信息請(qǐng)?jiān)L問(wèn): http://gowalker.org/crypto/tls#Config
通過(guò)如下接口可以設(shè)置請(qǐng)求的超時(shí)時(shí)間和數(shù)據(jù)讀取時(shí)間:
req.SetTimeout(connectTimeout, readWriteTimeout)
以上方法都是針對(duì) request 對(duì)象的,所以你第一步必須是返回 request 對(duì)象,然后鏈?zhǔn)讲僮?,?lèi)似這樣的代碼:
httplib.Get("http://beego.me/").SetTimeout(100 * time.Second, 30 * time.Second).Response()
對(duì)于 Put 或者 Post 請(qǐng)求,需要發(fā)送參數(shù),那么可以通過(guò) Param 發(fā)送 k/v 數(shù)據(jù),如下所示:
req := httplib.Post("http://beego.me/")
req.Param("username","astaxie")
req.Param("password","123456")
有時(shí)候需要上傳文件之類(lèi)的模擬,那么如何發(fā)送這個(gè)文件數(shù)據(jù)呢?可以通過(guò) Body 函數(shù)來(lái)操作,舉例如下:
req := httplib.Post("http://beego.me/")
bt,err:=ioutil.ReadFile("hello.txt")
if err!=nil{
log.Fatal("read file err:",err)
}
req.Body(bt)
除了請(qǐng)求參數(shù)之外,我們有些時(shí)候需要模擬一些頭信息,例如
Accept-Encoding:gzip,deflate,sdch
Host:beego.me
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36
可以通過(guò) Header 函數(shù)來(lái)設(shè)置,如下所示:
req := httplib.Post("http://beego.me/")
req.Header("Accept-Encoding","gzip,deflate,sdch")
req.Header("Host","beego.me")
req.Header("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36")
http請(qǐng)求的傳輸由http.RoundTrip承載,因此我們可以實(shí)現(xiàn)接口以實(shí)現(xiàn)鏈接的控制。通過(guò)設(shè)置,我們可以實(shí)現(xiàn)長(zhǎng)連接,如下所示:
var tp http.RoundTripper = &http.Transport{
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
DualStack: true,
}).DialContext,
MaxIdleConns: 100,
IdleConnTimeout: 90 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
}
req := httplib.Post("http://beego.me/")
req.SetTransport(tp)
PostFile 第一個(gè)參數(shù)是 form 表單的字段名,第二個(gè)是需要發(fā)送的文件名或者文件路徑
b:=httplib.Post("http://beego.me/")
b.Param("username","astaxie")
b.Param("password","123456")
b.PostFile("uploadfile1", "httplib.pdf")
b.PostFile("uploadfile2", "httplib.txt")
str, err := b.String()
if err != nil {
t.Fatal(err)
}
上面這些都是在發(fā)送請(qǐng)求之前的設(shè)置,接下來(lái)我們開(kāi)始發(fā)送請(qǐng)求,然后如何來(lái)獲取數(shù)據(jù)呢?主要有如下幾種方式:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: