Golang實現requests庫
簡單的封裝下,方便使用,像python的requests庫一樣。
Github地址
支持
GET
、POST
、PUT
、DELETE
application/json
、application/x-www-form-urlencoded
不支持:
multipart/form-data
(現已支持,2019-04-16更新)
使用
下面是常用的例子,GET
請求;POST
表單提交、json提交,保存文件等。
Get
func getText() {
text, err := requests.Get("http://127.0.0.1:8080/ping").
Params(url.Values{
"param1": {"value1"},
"param2": {"123"},
}).
Send().
Text()
if err != nil {
panic(err)
}
fmt.Println(text)
}
GET
請求一般需要傳遞query string
,如下:
GET http://127.0.0.1:8080/ping?param1=value1¶m2=123 HTTP/1.1
Post Form
func postForm() {
text, err := requests.Post("http://127.0.0.1:8080/ping").
Params(url.Values{
"param1": {"value1"},
"param2": {"123"},
}).
Form(url.Values{
"form1": {"value1"},
"form2": {"123"},
}).
Send().
Text()
if err != nil {
panic(err)
}
fmt.Println(text)
}
POST
表單提交,需要在請求體中放入表單參數:
POST http://127.0.0.1:8080/ping?param1=value1¶m2=123 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
form1=value1&form2=123
Post Json
func postJson() {
text, err := requests.Post("http://127.0.0.1:8080/ping").
Params(url.Values{
"param1": {"value1"},
"param2": {"123"},
}).
Json(map[string]interface{}{
"json1": "value1",
"json2": 2,
}).
Send().
Text()
if err != nil {
panic(err)
}
fmt.Println(text)
}
POST
json請求需要在請求體中放入json字符串:
POST http://127.0.0.1:8080/ping?param1=value1¶m2=123 HTTP/1.1
Content-Type: application/json
{"json1": "value1", "json2": 2}
保存文件
func save() {
err := requests.Get("https://github.com/xuanbo/requests").
Send().
Save("./requests.html")
if err != nil {
panic(err)
}
}
實現思路
主要是通過golang的標准庫http去發送請求,下面是偽碼:
// 1.創建請求
req, err := http.NewRequest(method, url, strings.NewReader(body))
// 2.設置請求頭
req.Header
// 3.發送請求
resp, err:= http.DefaultClient.Do(req)
// 4.處理響應
r.Resp.Body
說明
Just for fun!