Misc fixes

This commit is contained in:
Ice3man543 2021-02-08 01:55:53 +05:30
parent 424aab7f4a
commit 2cc6b2283e
2 changed files with 17 additions and 12 deletions

View File

@ -1,6 +1,7 @@
package http
import (
"bytes"
"io"
"io/ioutil"
"net/http"
@ -280,8 +281,7 @@ func (r *Request) executeRequest(reqURL string, request *generatedRequest, dynam
duration := time.Since(timeStart)
dumpedResponse, err := httputil.DumpResponse(resp, true)
dumpedResponseHeaders, err := httputil.DumpResponse(resp, false)
if err != nil {
_, _ = io.CopyN(ioutil.Discard, resp.Body, drainReqSize)
resp.Body.Close()
@ -310,16 +310,21 @@ func (r *Request) executeRequest(reqURL string, request *generatedRequest, dynam
// net/http doesn't automatically decompress the response body if an
// encoding has been specified by the user in the request so in case we have to
// manually do it.
data, err = handleDecompression(request, data)
dataOrig := data
data, err = handleDecompression(resp, data)
if err != nil {
return errors.Wrap(err, "could not decompress http body")
}
// Dump response - step 2 - replace gzip body with deflated one or with itself (NOP operation)
if r.options.Options.Debug || r.options.Options.DebugResponse {
dumpedResponse = bytes.ReplaceAll(dumpedResponse, dataOrig, data)
redirectedResponse = bytes.ReplaceAll(redirectedResponse, dataOrig, data)
dumpedResponseBuilder := &bytes.Buffer{}
dumpedResponseBuilder.Write(dumpedResponseHeaders)
dumpedResponseBuilder.Write(data)
dumpedResponse := dumpedResponseBuilder.Bytes()
redirectedResponse = bytes.ReplaceAll(redirectedResponse, dataOrig, data)
// Dump response - step 2 - replace gzip body with deflated one or with itself (NOP operation)
if r.options.Options.Debug || r.options.Options.DebugResponse {
gologger.Info().Msgf("[%s] Dumped HTTP response for %s\n\n", r.options.TemplateID, formedURL)
gologger.Print().Msgf("%s", string(redirectedResponse))
}

View File

@ -95,22 +95,22 @@ func dump(req *generatedRequest, reqURL string) ([]byte, error) {
}
// handleDecompression if the user specified a custom encoding (as golang transport doesn't do this automatically)
func handleDecompression(r *generatedRequest, bodyOrig []byte) (bodyDec []byte, err error) {
if r.request == nil {
func handleDecompression(resp *http.Response, bodyOrig []byte) (bodyDec []byte, err error) {
if resp == nil {
return bodyOrig, nil
}
encodingHeader := strings.TrimSpace(strings.ToLower(r.request.Header.Get("Accept-Encoding")))
if encodingHeader == "gzip" || encodingHeader == "gzip, deflate" {
encodingHeader := strings.TrimSpace(strings.ToLower(resp.Header.Get("Content-Encoding")))
if strings.Contains(encodingHeader, "gzip") {
gzipreader, err := gzip.NewReader(bytes.NewReader(bodyOrig))
if err != nil {
return bodyDec, err
return bodyOrig, err
}
defer gzipreader.Close()
bodyDec, err = ioutil.ReadAll(gzipreader)
if err != nil {
return bodyDec, err
return bodyOrig, err
}
return bodyDec, nil
}