34 lines
921 B
Go
34 lines
921 B
Go
|
package websteps
|
||
|
|
||
|
import (
|
||
|
"io"
|
||
|
"net/http"
|
||
|
)
|
||
|
|
||
|
// HTTPDo performs the HTTP check.
|
||
|
// Input:
|
||
|
// req *http.Request
|
||
|
// The same request than the one used by the Explore step.
|
||
|
// This means that req contains the headers set by the original CtrlRequest, as well as,
|
||
|
// in case of a redirect chain, additional headers that were added due to redirects
|
||
|
// transport http.RoundTripper:
|
||
|
// The transport to use, either http.Transport, or http3.RoundTripper.
|
||
|
func HTTPDo(req *http.Request, transport http.RoundTripper) (*http.Response, []byte, error) {
|
||
|
clnt := http.Client{
|
||
|
CheckRedirect: func(r *http.Request, reqs []*http.Request) error {
|
||
|
return http.ErrUseLastResponse
|
||
|
},
|
||
|
Transport: transport,
|
||
|
}
|
||
|
resp, err := clnt.Do(req)
|
||
|
if err != nil {
|
||
|
return nil, nil, err
|
||
|
}
|
||
|
defer resp.Body.Close()
|
||
|
body, err := io.ReadAll(resp.Body)
|
||
|
if err != nil {
|
||
|
return resp, nil, nil
|
||
|
}
|
||
|
return resp, body, nil
|
||
|
}
|