日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯網營銷解決方案
Golang語言極簡HTTP客戶端GoRequest

1介紹

GoRequest 是一個極簡的 HTTP 客戶端,作者靈感來源于 Node.js 庫 SuperAgent。相比 Golang 標準庫 net/http,GoRequest 使用起來更加簡單。GoRequest 官方的口號是 “像機槍一樣發(fā)送請求”。

GoRequest 包含以下功能:

  • 支持 HTTP 請求方式:Get/Post/Put/Head/Delete/Patch/Options
  • 支持設置 header 請求頭
  • 支持使用 JSON 字符串作為請求參數
  • 支持將多路請求的方式發(fā)送數據和文件
  • 支持通過代理發(fā)送請求
  • 支持為請求設置超時
  • 支持 TLS 客戶端設置
  • 支持設置重定向策略
  • 支持為請求設置 cookie
  • CookieJar - automatic in-memory cookiejar
  • 支持請求頭設置基本身份認證

安裝方式:

 
 
 
 
  1. go get github.com/parnurzeal/gorequest 

2HTTP 請求方式

Golang 發(fā)送一個簡單的 Get 請求,使用 net/http 標準庫和使用 GoRequst 庫,兩種發(fā)送 Get 請求的方式都比較簡單。

示例代碼如下:

標準庫方式:

 
 
 
 
  1. resp, err := http.Get("http://example.com/") 

GoRequest 庫方式:

 
 
 
 
  1. request := gorequest.New() 
  2. resp, body, errs := request.Get("http://example.com/").End() 

或(該 GoRequest 方式無法復用對象)

 
 
 
 
  1. resp, body, errs := gorequest.New().Get("http://example.com/").End() 

閱讀上面這兩段代碼,我們可以發(fā)現,使用標準庫的方式發(fā)送 Get 請求,甚至比使用 GoRequest 庫的方式發(fā)送 Get 請求更加簡單。

但是,當我們需求稍作修改,比如我們需要為 Get 請求,設置 header 頭和設置重定向策略。我們再來看一下分別使用標準庫和 GoRequest 庫兩種實現方式。

標準庫方式:

 
 
 
 
  1. client := &http.Client{ 
  2.   CheckRedirect: redirectPolicyFunc, 
  3.  
  4. req, err := http.NewRequest("GET", "http://example.com", nil) 
  5.  
  6. req.Header.Add("If-None-Match", `W/"wyzzy"`) 
  7. resp, err := client.Do(req) 

GoRequest 庫方式(其它 HTTP 請求方式與 Get 使用方式相同):

 
 
 
 
  1. request := gorequest.New() 
  2. resp, body, errs := request.Get("http://example.com"). 
  3.   RedirectPolicy(redirectPolicyFunc). 
  4.   Set("If-None-Match", `W/"wyzzy"`). 
  5.   End() 

閱讀上面兩段代碼,很容易發(fā)現使用 GoRequest 方式使實現更加簡單。使用標準庫方式,首先需要創(chuàng)建一個 Client,然后使用不同的命令設置 header 頭等操作,這僅僅是為了實現一個 HTTP 請求。而使用 GoRequest 方式,僅需鏈式調用兩個方法即可輕松實現。

3JSON 格式請求參數

在 Golang 語言中,如果使用標準庫 net/http 發(fā)送請求參數為 JSON 格式的 POST 請求,首先需要先將 map 或 struct 類型的數據,使用標準庫 encoding/json 的 Marshal 方法,將數據轉換為 JSON 格式的數據,并且設置 header 頭參數 Content-Type 的值為 application/json,然后創(chuàng)建一個 Client,最終你的代碼變得越來越長,越來越難維護。

標準庫方式:

 
 
 
 
  1. m := map[string]interface{}{ 
  2.   "name": "backy", 
  3.   "species": "dog", 
  4. mJson, _ := json.Marshal(m) 
  5. contentReader := bytes.NewReader(mJson) 
  6. req, _ := http.NewRequest("POST", "http://example.com", contentReader) 
  7. req.Header.Set("Content-Type", "application/json") 
  8. req.Header.Set("Notes","GoRequest is coming!") 
  9. client := &http.Client{} 
  10. resp, _ := client.Do(req) 

如果使用 GoRequest 庫發(fā)送請求參數為 JSON 格式的 POST 請求,因為它默認支持 JSON 格式的請求參數,所以它只需要一行代碼就可以實現。

GoRequest 庫方式:

 
 
 
 
  1. request := gorequest.New() 
  2. resp, body, errs := request.Post("http://example.com"). 
  3.   Set("Notes","gorequst is coming!"). 
  4.   Send(`{"name":"backy", "species":"dog"}`). 
  5.   End() 

4支持回調函數 Callback

GoRequest 庫還支持回調函數,你可以根據自己的項目需求靈活使用它,回調函數示例代碼如下:

 
 
 
 
  1. func printStatus(resp gorequest.Response, body string, errs []error){ 
  2.   fmt.Println(resp.Status) 
  3. gorequest.New().Get("http://example.com").End(printStatus) 

5請求控制

在 Golang 項目開發(fā)中,有時我們可能需要對請求做一些額外控制,比如超時處理,重試請求 N 次,重定向處理等。GoRequest 庫都可以為我們提供簡單的實現方式。

超時處理:

 
 
 
 
  1. request := gorequest.New().Timeout(2*time.Millisecond) 
  2. resp, body, errs:= request.Get("http://example.com").End() 

需要注意的是,Timeout 是將 Dial 連接和 IO 讀寫的耗時總和,與時間參數作比較。

重試請求:

 
 
 
 
  1. request := gorequest.New() 
  2. resp, body, errs := request.Get("http://example.com/"). 
  3.                     Retry(3, 5 * time.Second, http.StatusBadRequest, http.StatusInternalServerError). 
  4.                     End() 

閱讀上面這段代碼,它的含義是當服務器返回結果是 http.StatusBadRequest 或 http.StatusInternalServerError 時,會每隔 5 秒重試請求一次,共重試 3 次。

重定向處理:

 
 
 
 
  1. request := gorequest.New() 
  2. resp, body, errs := request.Get("http://example.com/"). 
  3.                     RedirectPolicy(func(req Request, via []*Request) error { 
  4.                       if req.URL.Scheme != "https" { 
  5.                         return http.ErrUseLastResponse 
  6.                       } 
  7.                     }). 
  8.                     End() 

閱讀上面這段代碼,它的含義是將 http 請求重定向為 https 請求。

6返回結果處理方式

讀者朋友們可能已經發(fā)現,以上示例代碼都是以 End 結束,End 的含義是返回結果是字符串類型,如果我們希望返回結果是其他類型,比如字節(jié)類型和結構體類型,可以將 End 分別替換為 EndBytes 和 EndStruct。

EndBytes 格式:

 
 
 
 
  1. resp, bodyBytes, errs := gorequest.New().Get("http://example.com/").EndBytes() 

EndStruct 格式:

 
 
 
 
  1. heyYou struct { 
  2.   Hey string `json:"hey"` 
  3.  
  4. var heyYou heyYou 
  5.  
  6. resp, _, errs := gorequest.New().Get("http://example.com/").EndStruct(&heyYou) 

7總結

本文我們介紹 Golang 語言的極簡 HTTP 客戶端 GoRequest 以及它的使用方法。它比標準庫 net/http 使用方式簡單,當我們項目開發(fā)中需要使用 HTTP 方式調用接口時,強烈推薦使用 GoRequest 庫。

GoRequest 底層在大多數用例中是基于 http.Client 實現的,所以通過一次調用 gorequest.New() 得到的對象,應盡可能多次使用。

GoRequest 除了上面介紹的 JSON 參數,它還支持 Struct 和 File,感興趣的讀者可以查閱官方文檔了解相關內容。

本文轉載自微信公眾號「Golang語言開發(fā)棧」,可以通過以下二維碼關注。轉載本文請聯系Golang語言開發(fā)棧公眾號。


名稱欄目:Golang語言極簡HTTP客戶端GoRequest
標題來源:http://www.dlmjj.cn/article/dhgpegh.html