go-resty學習記錄

随心行者發表於2024-11-26

一. go-resty一個優秀的 HTTP 客戶端庫
go-resty是一個優秀的 HTTP 客戶端庫,支援鏈式呼叫,超時控制,TLS,Cookie 管理,連結池,代理,支援多種認證方式包括基本認證和 OAuth 2.0,支援傳送 JSON、XML 和 URL 編碼的資料,檔案上傳和下載,支援傳送大量請求並批次處理響應結果,同時提供簡單易用的 API 介面。
1、go-resty 的優點
對於 RESTful API 開發者更加友好:go-resty 透過鏈式呼叫介面使得程式碼更具可讀性,容易實現複雜的 API 呼叫。
容易擴充:go-resty 提供了許多官方擴充套件外掛,如 Logger、Retryer、JSONMarshaler、XMLMarshaler、OAuth1 等等
更簡單的錯誤處理:go-resty 會在返回的 Response 中包含所有的錯誤資訊。
2、go-resty 的缺點
需要額外依賴庫:使用 go-resty 需要引入第三方庫,而 net/http 則是 Go 標準庫自帶的,不需要額外引用。
相對較慢:由於 go-resty 是基於 net/http 封裝的,所以在某些情況下可能比 net/http 要慢一些。
3、相對於 go-resty 來說net/http 的缺點
錯誤資訊不夠全面:net/http 返回的 Response 中的錯誤資訊不夠全面。
URL 解析錯誤跑出 panic:當解析一個錯誤的 URL 時,net/http 會直接丟擲 panic 而不是返回一個錯誤資訊,可能會導致程式崩潰。

二、總結go-resty中提供的API
1、Resty 物件方法
New() *Resty: 建立一個預設配置的 Resty 物件。
NewWithClient(client *http.Client) *Resty: 建立一個自定義配置的 Resty 物件,並使用指定的 http.Client 客戶端物件。
R() *Request: 建立一個 Request 物件,並使用 Resty 物件的預設配置設定。
SetDebug(on bool) *Resty: 設定是否啟用除錯模式。如果啟用,則會在控制檯輸出詳細的請求和響應資訊。
SetTimeout(timeout time.Duration) *Resty: 設定超時時間。可以在傳送請求之前設定超時時間,單位為秒。
SetHeaders(headers map[string]string) *Resty: 設定請求頭。可以透過傳入一個鍵值對對映來設定多個請求頭。
SetQueryParam(key, value string) *Request: 設定查詢引數。可以透過在請求 URL 後新增查詢字串引數的方式設定。
SetFormData(data map[string]string) *Request: 設定表單資料。可以透過傳入一個鍵值對對映來設定多個表單欄位。
SetFormDataFromValues(values url.Values) *Request: 設定表單資料。可以透過傳入一個 url.Values 物件來設定多個表單欄位。
SetBody(body interface{}) *Request: 設定請求體。可以透過傳入一個支援 io.Reader 介面的物件、位元組陣列或字串來設定請求體內容。
SetResult(result interface{}) *Request: 設定響應結果型別。可以透過傳入一個結構體物件型別來指定響應結果的解析方式。
SetError(err interface{}) *Request: 設定錯誤型別。可以透過傳入一個結構體物件型別來指定解析錯誤資訊的方式。
SetError(&ResponseError{Error: “custom error”}) *Request: 設定自定義錯誤資訊,可以在請求返回不成功的情況下獲取。
GetClient() *http.Client: 獲取當前 Resty 物件使用的 http.Client 客戶端物件。
SetTLSClientConfig(config *tls.Config) *Resty: 設定 TLS 客戶端配置,例如關閉證書校驗等安全選項。
SetCertificates(certFile, keyFile string, password string) error: 設定客戶端證書和私鑰,用於雙向認證和 TLS 握手過程中的身份驗證。

2、Request 物件方法
SetMethod(method string) *Request: 設定請求方法。可以設定 GET、POST、PUT、DELETE 等常見的 HTTP 請求方法。
SetHeader(key, value string) *Request: 設定請求頭。可以透過傳入一個鍵值對來設定單個請求頭。
SetHeaders(headers map[string]string) *Request: 設定請求頭。可以透過傳入一個鍵值對對映來設定多個請求頭。
SetQueryParam(key, value string) *Request: 設定查詢引數。可以透過在請求 URL 後新增查詢字串引數的方式設定。
SetFormData(data map[string]string) *Request: 設定表單資料。可以透過傳入一個鍵值對對映來設定多個表單欄位。
SetFormDataFromValues(values url.Values) *Request: 設定表單資料。透過傳入一個 url.Values 物件來設定多個表單欄位
SetBody(body interface{}) *Request: 設定請求體。透過傳入一個支援 io.Reader 介面的物件、位元組陣列或字串來設定請求體內容。
SetResult(result interface{}) *Request: 設定響應結果型別。可以透過傳入一個結構體物件型別來指定響應結果的解析方式。
SetError(err interface{}) *Request: 設定錯誤型別。可以透過傳入一個結構體物件型別來指定解析錯誤資訊的方式。
SetError(&ResponseError{Error: “custom error”}) Request: 設定自定義錯誤資訊,可以在請求返回不成功的情況下獲取。
Execute() (
Response, error): 執行 HTTP 請求,並返回響應結果。如果請求出現問題或響應不成功,會返回一個錯誤物件
GetRequestURL() string: 獲取當前請求的完整 URL。
SetBasicAuth(username, password string) *Request: 設定基本身份驗證資訊。透過傳入使用者名稱和密碼來設定 HTTP 基本身份驗證頭
SetAuthToken(token string) *Request: 設定 Token 鑑權資訊。可以透過傳入 Token 字串來設定 HTTP 請求頭。
SetCloseConnection(cflag bool) *Request: 設定是否關閉連線。可以設定為 true 來在每次請求後關閉連線,也可以設定為 false 來保持長連線。
SetContentLength(contentLength int64) *Request: 設定請求體長度。在傳送有請求體的請求時,顯式地指定請求體的長度
SetContext(ctx context.Context) Request: 設定請求上下文。可以透過傳入一個 context.Context 物件來控制請求的生命週期和超時等細節。
SetCookies(cookies []
http.Cookie) *Request: 設定請求 Cookie。可以透過傳入一個 Cookie 陣列來設定多個 Cookie。
SetDisableWarn(bool) *Request: 設定是否禁用 Resty 警告資訊。如果設為 true,則會隱藏一些警告資訊。
SetDoNotParseResponse(bool) *Request: 設定是否跳過響應解析。如果設為 true,則會返回原始的響應位元組陣列,而不是解析後的結構體物件。
SetFile(key, filepath string) *Request: 向表單資料中新增檔案。傳入檔名和檔案路徑引數來新增檔案欄位和對應的檔案內容
SetHeader(key, value string) *Request: 設定請求頭。可以透過傳入一個鍵值對來設定單個請求頭。
SetHostURL(url string) *Request: 設定請求的基本 URL。可以在傳送請求前設定基本的 URL,然後在具體請求中只傳入相對路徑即可。
SetOutput(output io.Writer) *Request: 設定響應輸出。可以透過傳入一個 io.Writer 物件來將響應結果輸出到指定的流中。
SetQueryParam(key, value string) Request: 設定查詢引數。可以透過在請求 URL 後新增查詢字串引數的方式設定。
SetRedirectPolicy(policy grequests.RedirectPolicy) Request: 設定重定向策略。可以傳入一個實現了 grequests.RedirectPolicy 介面的物件來自定義重定向行為。
SetRedirectPolicyFunc(f func(
http.Request, []
http.Request) error) *Request: 設定重定向策略函式。可以傳入一個自定義的函式來設定重定向行為。
SetRequestBodyStream(body io.ReadCloser) *Request: 設定請求體流。可以傳入一個支援 io.ReadCloser 介面的物件來指定請求體內容。
SetRequestURI(uri string) *Request: 設定完整請求 URI。可以用於更靈活地控制請求的地址和引數等資訊。
SetRetryCount(retryCount int) *Request: 設定重試次數。可以在請求失敗或出錯時自動重試該請求,設為 0 則不重試。
SetRetryWaitTime(retryWaitTime time.Duration) *Request: 設定重試間隔時間。可以在請求失敗或出錯時自動重試該請求,並設定重試之間的間隔時間。
SetTransport(transport http.RoundTripper) *Request: 設定傳輸層。可以透過傳入一個實現了 http.RoundTripper 介面的物件來定製 HTTP 傳輸層行為。
ToJSON(v interface{}) error: 將請求體解析為 JSON 格式。可以傳入一個結構體物件指標來解析響應結果。
ToXML(v interface{}) error: 將請求體解析為 XML 格式。可以傳入一個結構體物件指標來解析響應結果。
ToString() (string, error): 將響應結果解析為字串。如果響應結果不是字串格式,則會返回一個解析錯誤。
ToBytes() ([]byte, error): 將響應結果解析為位元組陣列。如果響應結果無法解析,則會返回一個解析錯誤。
ToFile(filepath string) error: 將響應結果儲存到檔案中。可以傳入檔案路徑引數來儲存響應結果。
IsError(err error) bool: 判斷是否出現了錯誤。可以在請求結束後透過該方法判斷請求是否成功或出錯。

3、Response 物件方法
StatusCode() int: 獲取 HTTP 狀態碼。可以獲取 HTTP 響應返回的狀態碼。
Proto() string: 獲取 HTTP 協議版本。可以獲取 HTTP 響應使用的協議版本。
Body() []byte: 獲取響應內容。可以獲取 HTTP 響應返回的原始位元組流。
Result() interface{}: 獲取響應結果。可以獲取經過解析和轉換後的響應結果。
Error() error: 獲取錯誤資訊。如果請求失敗或返回結果有誤,則會返回一個錯誤物件。
Header() http.Header: 獲取響應頭。可以獲取 HTTP 響應返回的原始頭部資訊。
Cookies() []*http.Cookie: 獲取響應 Cookie。可以獲取 HTTP 響應返回的所有 Cookie 鍵值對。
String() string: 獲取響應結果字串。可以直接獲取 HTTP 響應返回的字串格式結果。
Time() time.Time: 獲取響應時間。可以獲取 HTTP 響應的時間戳和格式化字串。
Request() *http.Request: 獲取原始請求。可以獲取 HTTP 請求的原始物件,包含所有請求頭部和請求體等資訊。