mirror of
https://github.com/phishingclub/phishingclub.git
synced 2026-07-16 08:47:28 +02:00
07c8adaf76
Signed-off-by: Ronni Skansing <rskansing@gmail.com>
69 lines
3.3 KiB
Go
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
|
|
}
|