support http-100 continue for sniffer

This commit is contained in:
ginuerzh
2025-06-24 21:15:38 +08:00
parent 8cacfad9eb
commit d819fd3041
2 changed files with 33 additions and 11 deletions
+17 -6
View File
@@ -470,12 +470,23 @@ func (h *Sniffer) httpRoundTrip(ctx context.Context, rw, cc io.ReadWriter, node
return return
} }
xio.SetReadDeadline(cc, time.Now().Add(h.ReadTimeout)) br := bufio.NewReader(cc)
resp, err := http.ReadResponse(bufio.NewReader(cc), req) var resp *http.Response
if err != nil { for {
log.Errorf("read response: %v", err) xio.SetReadDeadline(cc, time.Now().Add(h.ReadTimeout))
res.Write(rw) resp, err = http.ReadResponse(br, req)
return if err != nil {
log.Errorf("read response: %v", err)
res.Write(rw)
return
}
if resp.StatusCode >= http.StatusContinue && resp.StatusCode < http.StatusOK {
resp.Write(rw)
resp.Body.Close()
continue
}
break
} }
defer resp.Body.Close() defer resp.Body.Close()
xio.SetReadDeadline(cc, time.Time{}) xio.SetReadDeadline(cc, time.Time{})
+16 -5
View File
@@ -337,11 +337,22 @@ func (h *Sniffer) httpRoundTrip(ctx context.Context, rw, cc io.ReadWriter, req *
return return
} }
xio.SetReadDeadline(cc, time.Now().Add(h.ReadTimeout)) br := bufio.NewReader(cc)
resp, err := http.ReadResponse(bufio.NewReader(cc), req) var resp *http.Response
if err != nil { for {
err = fmt.Errorf("read response: %w", err) xio.SetReadDeadline(cc, time.Now().Add(h.ReadTimeout))
return resp, err = http.ReadResponse(br, req)
if err != nil {
err = fmt.Errorf("read response: %v", err)
return
}
if resp.StatusCode >= http.StatusContinue && resp.StatusCode < http.StatusOK {
resp.Write(rw)
resp.Body.Close()
continue
}
break
} }
defer resp.Body.Close() defer resp.Body.Close()
xio.SetReadDeadline(cc, time.Time{}) xio.SetReadDeadline(cc, time.Time{})