AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

圖文講透Golang標準庫 net/http實現原理 - 客戶端

來源: 責編: 時間:2024-02-05 09:31:07 216觀看
導讀客戶端的內容將是如何發送請求和接收響應,走完客戶端就把整個流程就完整的串聯起來了!這次我把調用的核心方法和流程走讀的函數也貼出來,這樣看應該更有邏輯感,重要部分用紅色標記了一下,可以著重看下。圖片先了解下核心數

客戶端的內容將是如何發送請求和接收響應,走完客戶端就把整個流程就完整的串聯起來了!yWF28資訊網——每日最新資訊28at.com

這次我把調用的核心方法和流程走讀的函數也貼出來,這樣看應該更有邏輯感,重要部分用紅色標記了一下,可以著重看下。yWF28資訊網——每日最新資訊28at.com

圖片圖片yWF28資訊網——每日最新資訊28at.com

先了解下核心數據結構Client和Request。yWF28資訊網——每日最新資訊28at.com

Client結構體

type Client struct {     Transport RoundTripper     CheckRedirect func(req *Request, via []*Request) error     Jar CookieJar     Timeout time.Duration}

四個字段分別是:yWF28資訊網——每日最新資訊28at.com

  • ? Transport:表示 HTTP 事務,用于處理客戶端的請求連接并等待服務端的響應;
  • ? CheckRedirect:處理重定向的策略
  • ? Jar:管理和存儲請求中的 cookie
  • ? Timeout:超時設置

Request結構體

Request字段較多,這里就列舉一下常見的一些字段yWF28資訊網——每日最新資訊28at.com

type Request struct {    Method string    URL *url.URL    Header Header    Body io.ReadCloser    Host string    Response *Response    ...}
  • ? Method:指定的HTTP方法(GET、POST、PUT等)
  • ? URL:請求路徑
  • ? Header:請求頭
  • ? Body:請求體
  • ? Host:服務器主機
  • ? Response:響應參數

構造請求

var DefaultClient = &Client{}func Get(url string) (resp *Response, err error) {    return DefaultClient.Get(url)}

示例HTTP 的 Get方法會調用到 DefaultClient 的 Get 方法,,然后調用到 Client 的 Get 方法。yWF28資訊網——每日最新資訊28at.com

DefaultClient 是 Client 的一個空實例(跟DefaultServeMux有點子相似)yWF28資訊網——每日最新資訊28at.com

圖片圖片yWF28資訊網——每日最新資訊28at.com

Client.GetyWF28資訊網——每日最新資訊28at.com

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)}func NewRequest(method, url string, body io.Reader) (*Request, error) {    return NewRequestWithContext(context.Background(), method, url, body)}

Client.Get() 根據用戶的入參,請求參數 NewRequest使用上下文包裝NewRequestWithContext ,接著通過 Client.Do 方法,處理這個請求。yWF28資訊網——每日最新資訊28at.com

NewRequestWithContextyWF28資訊網——每日最新資訊28at.com

func NewRequestWithContext(ctx context.Context, method, url string, body io.Reader) (*Request, error) {    ...    // 解析url    u, err := urlpkg.Parse(url)    ...    rc, ok := body.(io.ReadCloser)    if !ok && body != nil {        rc = ioutil.NopCloser(body)    }     u.Host = removeEmptyPort(u.Host)    req := &Request{        ctx:        ctx,        Method:     method,        URL:        u,        Proto:      "HTTP/1.1",        ProtoMajor: 1,        ProtoMinor: 1,        Header:     make(Header),        Body:       rc,        Host:       u.Host,    }     ...    return req, nil}

NewRequestWithContext 函數主要是功能是將請求封裝成一個 Request 結構體并返回,這個結構體的名稱是req。yWF28資訊網——每日最新資訊28at.com

準備發送請求

構造好的Request結構req,會傳入c.Do()方法。yWF28資訊網——每日最新資訊28at.com

我們看下發送請求過程調用了哪些方法,用下圖表示下yWF28資訊網——每日最新資訊28at.com

圖片圖片yWF28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-73789-0.html圖文講透Golang標準庫 net/http實現原理 - 客戶端

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python協程的實現方式

下一篇: NextTick 在 Vue 中如何發揮作用的?其實大部分人一知半解

標簽:
  • 熱門焦點
Top