<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # package httputil `import "net/http/httputil"` httputil包提供了HTTP公用函數,是對net/http包的更常見函數的補充。 ## Index * [Variables](#pkg-variables) * [func DumpRequest(req \*http.Request, body bool) (dump []byte, err error)](#DumpRequest) * [func DumpRequestOut(req \*http.Request, body bool) ([]byte, error)](#DumpRequestOut) * [func DumpResponse(resp \*http.Response, body bool) (dump []byte, err error)](#DumpResponse) * [func NewChunkedReader(r io.Reader) io.Reader](#NewChunkedReader) * [func NewChunkedWriter(w io.Writer) io.WriteCloser](#NewChunkedWriter) * [type ClientConn](#ClientConn) * [func NewClientConn(c net.Conn, r \*bufio.Reader) \*ClientConn](#NewClientConn) * [func NewProxyClientConn(c net.Conn, r \*bufio.Reader) \*ClientConn](#NewProxyClientConn) * [func (cc \*ClientConn) Pending() int](#ClientConn.Pending) * [func (cc \*ClientConn) Write(req \*http.Request) (err error)](#ClientConn.Write) * [func (cc \*ClientConn) Read(req \*http.Request) (resp \*http.Response, err error)](#ClientConn.Read) * [func (cc \*ClientConn) Do(req \*http.Request) (resp \*http.Response, err error)](#ClientConn.Do) * [func (cc \*ClientConn) Hijack() (c net.Conn, r \*bufio.Reader)](#ClientConn.Hijack) * [func (cc \*ClientConn) Close() error](#ClientConn.Close) * [type ServerConn](#ServerConn) * [func NewServerConn(c net.Conn, r \*bufio.Reader) \*ServerConn](#NewServerConn) * [func (sc \*ServerConn) Pending() int](#ServerConn.Pending) * [func (sc \*ServerConn) Read() (req \*http.Request, err error)](#ServerConn.Read) * [func (sc \*ServerConn) Write(req \*http.Request, resp \*http.Response) error](#ServerConn.Write) * [func (sc \*ServerConn) Hijack() (c net.Conn, r \*bufio.Reader)](#ServerConn.Hijack) * [func (sc \*ServerConn) Close() error](#ServerConn.Close) * [type ReverseProxy](#ReverseProxy) * [func NewSingleHostReverseProxy(target \*url.URL) \*ReverseProxy](#NewSingleHostReverseProxy) * [func (p \*ReverseProxy) ServeHTTP(rw http.ResponseWriter, req \*http.Request)](#ReverseProxy.ServeHTTP) ## Variables ``` var ( ErrPersistEOF = &http.ProtocolError{ErrorString: "persistent connection closed"} ErrClosed = &http.ProtocolError{ErrorString: "connection closed by user"} ErrPipeline = &http.ProtocolError{ErrorString: "pipeline error"} ) ``` ``` var ErrLineTooLong = errors.New("header line too long") ``` ## func [DumpRequest](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/dump.go?name=release#176 "View Source") ``` func DumpRequest(req *http.Request, body bool) (dump []byte, err error) ``` DumpRequest返回req的和被服務端接收到時一樣的有線表示,可選地包括請求的主體,用于debug。本函數在語義上是無操作的,但為了轉儲請求主體,他會讀取主體的數據到內存中,并將req.Body修改為指向內存中的拷貝。req的字段的使用細節請參見http.Request的文檔。 ## func [DumpRequestOut](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/dump.go?name=release#61 "View Source") ``` func DumpRequestOut(req *http.Request, body bool) ([]byte, error) ``` DumpRequestOut類似DumpRequest,但會包括標準http.Transport類型添加的頭域,如User-Agent。 ## func [DumpResponse](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/dump.go?name=release#251 "View Source") ``` func DumpResponse(resp *http.Response, body bool) (dump []byte, err error) ``` DumpResponse類似DumpRequest,但轉儲的是一個回復。 ## func [NewChunkedReader](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/httputil.go?name=release#17 "View Source") ``` func NewChunkedReader(r io.Reader) io.Reader ``` NewChunkedReader返回一個io.Reader。返回值的Read方法會將從r讀取的采用HTTP "chunked"傳輸編碼的數據翻譯之后返回。當讀取到最后的零長chunk時,返回值的Read會返回io.EOF。 NewChunkedReader在正常的應用中是不需要的,http包在讀取回復主體時會自動將"chunked"編碼進行解碼。 ## func [NewChunkedWriter](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/httputil.go?name=release#30 "View Source") ``` func NewChunkedWriter(w io.Writer) io.WriteCloser ``` NewChunkedWriter返回一個io.Writer。返回值的Write方法會將寫入的數據編碼為HTTP "chunked"傳輸編碼格式后再寫入w。其Close方法會將最后的零長chunk寫入w,標注數據流的結尾。 正常的應用中不需要NewChunkedWriter,http包會在處理器未設置Content-Length頭時主動進行chunked編碼。在處理器內部使用本函數會導致雙重chunked或者有Content-Length頭的chunked,兩個都是錯誤的。 ## type [ClientConn](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/persist.go?name=release#229 "View Source") ``` type ClientConn struct { // 內含隱藏或非導出字段 } ``` ClientConn類型會在尊重HTTP keepalive邏輯的前提下,在下層的連接上發送請求和接收回復的頭域。ClientConn類型支持通過Hijack方法劫持下層連接,取回對下層連接的控制權,按照調用者的預期處理該連接。 ClientConn是舊的、低層次的。應用程序應使用net/http包的Client類型和Transport類型代替它。 ### func [NewClientConn](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/persist.go?name=release#247 "View Source") ``` func NewClientConn(c net.Conn, r *bufio.Reader) *ClientConn ``` NewClientConn返回一個對c進行讀寫的ClientConn。如果r不是nil,它是從c讀取時使用的緩沖。 ### func [NewProxyClientConn](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/persist.go?name=release#264 "View Source") ``` func NewProxyClientConn(c net.Conn, r *bufio.Reader) *ClientConn ``` NewProxyClientConn類似NewClientConn,但使用Request.WriteProxy方法將請求寫入c。 ### func (\*ClientConn) [Pending](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/persist.go?name=release#351 "View Source") ``` func (cc *ClientConn) Pending() int ``` Pending返回該連接上已發送但還未接收到回復的請求的數量。 ### func (\*ClientConn) [Write](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/persist.go?name=release#298 "View Source") ``` func (cc *ClientConn) Write(req *http.Request) (err error) ``` Write寫入一個請求。如果該連接已經在HTTP keepalive邏輯上關閉了(表示該連接不會再發送新的請求)返回ErrPersistEOF。如果req.Close設置為真,keepalive連接會在這次請求后邏輯上關閉,并通知遠端的服務器。ErrUnexpectedEOF表示遠端關閉了下層的TCP連接,這一般被視為優雅的(正常的)關閉。 ### func (\*ClientConn) [Read](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/persist.go?name=release#361 "View Source") ``` func (cc *ClientConn) Read(req *http.Request) (resp *http.Response, err error) ``` Read讀取下一個回復。合法的回復可能會和ErrPersistEOF一起返回,這表示遠端要求該請求是最后一個被服務的請求。Read可以和Write同時調用,但不能和另一個Read同時調用。 ### func (\*ClientConn) [Do](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/persist.go?name=release#423 "View Source") ``` func (cc *ClientConn) Do(req *http.Request) (resp *http.Response, err error) ``` Do是一個便利方法,它會寫入一個請求,并讀取一個回復。(能不能保證二者對應?不知道) ### func (\*ClientConn) [Hijack](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/persist.go?name=release#274 "View Source") ``` func (cc *ClientConn) Hijack() (c net.Conn, r *bufio.Reader) ``` Hijack拆開ClientConn返回下層的連接和讀取側的緩沖,其中可能有部分剩余的數據。Hijack可以在調用者自身或者其Read方法發出keepalive邏輯的終止信號之前調用。調用者不應在Write或Read執行過程中調用Hijack。 ### func (\*ClientConn) [Close](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/persist.go?name=release#285 "View Source") ``` func (cc *ClientConn) Close() error ``` Close調用Hijack,然后關閉下層的連接。 ## type [ServerConn](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/persist.go?name=release#36 "View Source") ``` type ServerConn struct { // 內含隱藏或非導出字段 } ``` ServerConn類型在下層的連接上接收請求和發送回復,直到HTTP keepalive邏輯結束。ServerConn類型支持通過Hijack方法劫持下層連接,取回對下層連接的控制權,按照調用者的預期處理該連接。ServerConn支持管道內套,例如,請求可以不和回復的發送同步的讀取(但仍按照相同的順序)。 ServerConn是舊的、低層次的。應用程序應使用net/http包的Server類型代替它。 ### func [NewServerConn](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/persist.go?name=release#53 "View Source") ``` func NewServerConn(c net.Conn, r *bufio.Reader) *ServerConn ``` NewServerConn返回一個新的從c讀寫的ServerConn。如果r補位nil,它將作為從c讀取時的緩沖。 ### func (\*ServerConn) [Pending](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/persist.go?name=release#163 "View Source") ``` func (sc *ServerConn) Pending() int ``` Pending返回該連接上已接收到但還未回復的請求的數量。 ### func (\*ServerConn) [Read](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/persist.go?name=release#87 "View Source") ``` func (sc *ServerConn) Read() (req *http.Request, err error) ``` Read讀取下一個請求。如果它優雅的決定不會再有更多的請求(例如,在HTTP/1.0連接的第一個請求之后,或者HTTP/1.1的一個具有" Connection:close "頭的請求之后),會返回ErrPersistEOF。 ### func (\*ServerConn) [Write](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/persist.go?name=release#172 "View Source") ``` func (sc *ServerConn) Write(req *http.Request, resp *http.Response) error ``` Write寫入req的回復resp。如要優雅的關閉該連接,可以設置resp.Close字段為真。Write方法應該盡量執行(以回復盡量多的請求),直到Write本身返回錯誤,而不應考慮讀取側返回的任何錯誤。 ### func (\*ServerConn) [Hijack](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/persist.go?name=release#64 "View Source") ``` func (sc *ServerConn) Hijack() (c net.Conn, r *bufio.Reader) ``` Hijack拆開ServerConn返回下層的連接和讀取側的緩沖,其中可能有部分剩余的數據。Hijack可以在調用者自身或者其Read方法發出keepalive邏輯的終止信號之前調用。調用者不應在Write或Read執行過程中調用Hijack。 ### func (\*ServerConn) [Close](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/persist.go?name=release#75 "View Source") ``` func (sc *ServerConn) Close() error ``` Close調用Hijack,然后關閉下層的連接。 ## type [ReverseProxy](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/reverseproxy.go?name=release#27 "View Source") ``` type ReverseProxy struct { // Director必須是將請求修改為新的請求的函數。 // 修改后的請求會使用Transport發送,得到的回復會不經修改的返回給客戶端。 Director func(*http.Request) // Transport用于執行代理請求。 // 如果本字段為nil,會使用http.DefaultTransport。 Transport http.RoundTripper // FlushInterval指定拷貝回復的主體時將數據刷新給客戶端的時間間隔。 // 如果本字段為零值,不會進行周期的刷新。(拷貝完回復主體后再刷新) FlushInterval time.Duration } ``` ReverseProxy是一個HTTP處理器,它接收一個請求,發送給另一個服務端,將回復轉發給客戶端。 ### func [NewSingleHostReverseProxy](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/reverseproxy.go?name=release#61 "View Source") ``` func NewSingleHostReverseProxy(target *url.URL) *ReverseProxy ``` NewSingleHostReverseProxy返回一個新的ReverseProxy。返回值會將請求的URL重寫為target參數提供的協議、主機和基路徑。如果target參數的Path字段為"/base",接收到的請求的URL.Path為"/dir",修改后的請求的URL.Path將會是"/base/dir"。 ### func (\*ReverseProxy) [ServeHTTP](http://code.google.com/p/go/source/browse/src/pkg/net/http/httputil/reverseproxy.go?name=release#97 "View Source") ``` func (p *ReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看