Files
phishingclub/backend/vendor/github.com/enetx/surf/response.go
T
Ronni Skansing 07c8adaf76 update vendor deps
Signed-off-by: Ronni Skansing <rskansing@gmail.com>
2025-11-06 23:31:08 +01:00

69 lines
3.3 KiB
Go

package surf
import (
"net"
"net/url"
"time"
"github.com/enetx/g"
"github.com/enetx/http"
"github.com/enetx/surf/header"
)
// Response represents an HTTP response with enhanced functionality and metadata.
// It wraps the standard http.Response and provides additional features like timing information,
// retry attempts tracking, enhanced cookie management, and convenient access methods.
type Response struct {
*Client // Embedded client provides access to all client functionality
remoteAddr net.Addr // Remote server address captured during connection
URL *url.URL // Final URL after following redirects
response *http.Response // Underlying standard HTTP response
Body *Body // Enhanced response body with compression support and caching
request *Request // The original request that generated this response
Headers Headers // Response headers with convenience methods
UserAgent g.String // User agent that was used for the request
Proto g.String // HTTP protocol version (HTTP/1.1, HTTP/2, HTTP/3)
Cookies Cookies // Response cookies with enhanced functionality
Time time.Duration // Total request duration including retries
ContentLength int64 // Content-Length header value (-1 if not specified)
StatusCode StatusCode // HTTP status code with convenience methods
Attempts int // Number of retry attempts made for this request
}
// GetResponse returns the underlying standard http.Response.
// Provides access to the wrapped HTTP response for advanced use cases.
func (resp Response) GetResponse() *http.Response { return resp.response }
// Referer returns the HTTP Referer header value from the original request.
// This indicates which page linked to the resource being requested.
func (resp Response) Referer() g.String { return g.String(resp.response.Request.Referer()) }
// Location returns the HTTP Location header value, typically used in redirects.
// Contains the URL that the client should redirect to for 3xx status codes.
func (resp Response) Location() g.String { return resp.Headers.Get(header.LOCATION) }
// GetCookies returns all cookies from the response that would be sent to the specified URL.
// Filters cookies based on domain, path, and security attributes.
func (resp Response) GetCookies(rawURL g.String) []*http.Cookie { return resp.getCookies(rawURL) }
// RemoteAddress returns the network address of the server that sent this response.
// Useful for logging, debugging, or connection analysis.
func (resp Response) RemoteAddress() net.Addr { return resp.remoteAddr }
// SetCookies stores cookies in the client's cookie jar for the specified URL.
// This allows the cookies to be automatically sent with future requests to matching URLs.
func (resp *Response) SetCookies(rawURL g.String, cookies []*http.Cookie) error {
return resp.setCookies(rawURL, cookies)
}
// TLSGrabber extracts TLS connection information from the response.
// Returns detailed TLS connection data including certificates, cipher suites, and protocol version
// if the response was received over a TLS connection. Returns nil for non-TLS connections.
func (resp Response) TLSGrabber() *TLSData {
if resp.response.TLS != nil {
return tlsGrabber(resp.response.TLS)
}
return nil
}