|
|
@@ -52,7 +52,8 @@ type Client struct {
|
|
|
requestPassword string
|
|
|
requestUserAgent string
|
|
|
|
|
|
- useProxy bool
|
|
|
+ useProxy bool
|
|
|
+ doNotFollowRedirects bool
|
|
|
|
|
|
ClientTimeout int
|
|
|
ClientMaxBodySize int64
|
|
|
@@ -124,12 +125,18 @@ func (c *Client) WithCacheHeaders(etagHeader, lastModifiedHeader string) *Client
|
|
|
return c
|
|
|
}
|
|
|
|
|
|
-// WithProxy enable proxy for the current HTTP request.
|
|
|
+// WithProxy enables proxy for the current HTTP request.
|
|
|
func (c *Client) WithProxy() *Client {
|
|
|
c.useProxy = true
|
|
|
return c
|
|
|
}
|
|
|
|
|
|
+// WithoutRedirects disables HTTP redirects.
|
|
|
+func (c *Client) WithoutRedirects() *Client {
|
|
|
+ c.doNotFollowRedirects = true
|
|
|
+ return c
|
|
|
+}
|
|
|
+
|
|
|
// WithUserAgent defines the User-Agent header to use for HTTP requests.
|
|
|
func (c *Client) WithUserAgent(userAgent string) *Client {
|
|
|
if userAgent != "" {
|
|
|
@@ -266,7 +273,10 @@ func (c *Client) buildRequest(method string, body io.Reader) (*http.Request, err
|
|
|
}
|
|
|
|
|
|
func (c *Client) buildClient() http.Client {
|
|
|
- client := http.Client{Timeout: time.Duration(c.ClientTimeout) * time.Second}
|
|
|
+ client := http.Client{
|
|
|
+ Timeout: time.Duration(c.ClientTimeout) * time.Second,
|
|
|
+ }
|
|
|
+
|
|
|
transport := &http.Transport{
|
|
|
Proxy: http.ProxyFromEnvironment,
|
|
|
DialContext: (&net.Dialer{
|
|
|
@@ -284,6 +294,12 @@ func (c *Client) buildClient() http.Client {
|
|
|
IdleConnTimeout: 10 * time.Second,
|
|
|
}
|
|
|
|
|
|
+ if c.doNotFollowRedirects {
|
|
|
+ client.CheckRedirect = func(req *http.Request, via []*http.Request) error {
|
|
|
+ return http.ErrUseLastResponse
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if c.useProxy && c.ClientProxyURL != "" {
|
|
|
proxyURL, err := url.Parse(c.ClientProxyURL)
|
|
|
if err != nil {
|