本文整理汇总了Golang中ngrok/conn.Tee.WriteBuffer方法的典型用法代码示例。如果您正苦于以下问题:Golang Tee.WriteBuffer方法的具体用法?Golang Tee.WriteBuffer怎么用?Golang Tee.WriteBuffer使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ngrok/conn.Tee
的用法示例。
在下文中一共展示了Tee.WriteBuffer方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: readRequests
func (h *Http) readRequests(tee *conn.Tee, lastTxn chan *HttpTxn, connCtx interface{}) {
defer close(lastTxn)
for {
req, err := http.ReadRequest(tee.WriteBuffer())
if err != nil {
// no more requests to be read, we're done
break
}
// make sure we read the body of the request so that
// we don't block the writer
_, err = httputil.DumpRequest(req, true)
h.reqMeter.Mark(1)
if err != nil {
tee.Warn("Failed to extract request body: %v", err)
}
// golang's ReadRequest/DumpRequestOut is broken. Fix up the request so it works later
req.URL.Scheme = "http"
req.URL.Host = req.Host
txn := &HttpTxn{Start: time.Now(), ConnUserCtx: connCtx}
txn.Req = &HttpRequest{Request: req}
txn.Req.BodyBytes, txn.Req.Body, err = extractBody(req.Body)
lastTxn <- txn
h.Txns.In() <- txn
}
}
示例2: readRequests
func (h *Http) readRequests(tee *conn.Tee, lastTxn chan *HttpTxn) {
for {
req, err := http.ReadRequest(tee.WriteBuffer())
if err != nil {
// no more requests to be read, we're done
break
}
// make sure we read the body of the request so that
// we don't block the writer
_, err = httputil.DumpRequest(req, true)
h.reqMeter.Mark(1)
if err != nil {
tee.Warn("Failed to extract request body: %v", err)
}
txn := &HttpTxn{Start: time.Now()}
txn.Req = &HttpRequest{Request: req}
txn.Req.BodyBytes, txn.Req.Body, err = extractBody(req.Body)
lastTxn <- txn
h.Txns.In() <- txn
}
}
示例3: readRequests
func (h *Http) readRequests(tee *conn.Tee, lastTxn chan *HttpTxn) {
for {
req, err := http.ReadRequest(tee.WriteBuffer())
if err != nil {
// no more requests to be read, we're done
break
}
// make sure we read the body of the request so that
// we don't block the writer
_, err = httputil.DumpRequest(req, true)
h.reqMeter.Mark(1)
if err != nil {
tee.Warn("Failed to extract request body: %v", err)
}
// net/http's ReadRequest doesn't properly create the req.URL
// structure, which is needed to properly DumpRequest() later
req.URL, err = url.Parse(req.RequestURI)
req.URL.Host = req.Host
req.URL.Scheme = "http"
txn := &HttpTxn{Start: time.Now()}
txn.Req = &HttpRequest{Request: req}
txn.Req.BodyBytes, txn.Req.Body, err = extractBody(req.Body)
lastTxn <- txn
h.Txns.In() <- txn
}
}
示例4: readResponses
func (h *Http) readResponses(tee *conn.Tee, lastTxn chan *HttpTxn) {
for txn := range lastTxn {
resp, err := http.ReadResponse(tee.ReadBuffer(), txn.Req.Request)
txn.Duration = time.Since(txn.Start)
h.reqTimer.Update(txn.Duration)
if err != nil {
tee.Warn("Error reading response from server: %v", err)
// no more responses to be read, we're done
break
}
// make sure we read the body of the response so that
// we don't block the reader
_, _ = httputil.DumpResponse(resp, true)
txn.Resp = &HttpResponse{Response: resp}
// apparently, Body can be nil in some cases
if resp.Body != nil {
txn.Resp.BodyBytes, txn.Resp.Body, err = extractBody(resp.Body)
if err != nil {
tee.Warn("Failed to extract response body: %v", err)
}
}
h.Txns.In() <- txn
// XXX: remove web socket shim in favor of a real websocket protocol analyzer
if txn.Req.Header.Get("Upgrade") == "websocket" {
tee.Info("Upgrading to websocket")
var wg sync.WaitGroup
// shim for websockets
// in order for websockets to work, we need to continue reading all of the
// the bytes in the analyzer so that the joined connections will continue
// sending bytes to each other
wg.Add(2)
go func() {
ioutil.ReadAll(tee.WriteBuffer())
wg.Done()
}()
go func() {
ioutil.ReadAll(tee.ReadBuffer())
wg.Done()
}()
wg.Wait()
break
}
}
}