Skip to content

Commit ce2c0be

Browse files
authored
feat(enhancement): use request hostname if path is empty or '/' for save response (#948)
1 parent 433c6ec commit ce2c0be

File tree

4 files changed

+17
-2
lines changed

4 files changed

+17
-2
lines changed

client.go

+1
Original file line numberDiff line numberDiff line change
@@ -1791,6 +1791,7 @@ func (c *Client) IsSaveResponse() bool {
17911791
// - [Request.SetOutputFileName]
17921792
// - Content-Disposition header
17931793
// - Request URL using [path.Base]
1794+
// - Request URL hostname if path is empty or "/"
17941795
//
17951796
// It can be overridden at request level, see [Request.SetSaveResponse]
17961797
func (c *Client) SetSaveResponse(save bool) *Client {

middleware.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,8 @@ func AutoParseResponseMiddleware(c *Client, res *Response) (err error) {
538538
return
539539
}
540540

541+
var hostnameReplacer = strings.NewReplacer(":", "_", ".", "_")
542+
541543
// SaveToFileResponseMiddleware method used to write HTTP response body into
542544
// file. The filename is determined in the following order -
543545
// - [Request.SetOutputFileName]
@@ -557,8 +559,12 @@ func SaveToFileResponseMiddleware(c *Client, res *Response) error {
557559
}
558560
}
559561
if isStringEmpty(file) {
560-
urlPath, _ := url.Parse(res.Request.URL)
561-
file = path.Base(urlPath.Path)
562+
rURL, _ := url.Parse(res.Request.URL)
563+
if isStringEmpty(rURL.Path) || rURL.Path == "/" {
564+
file = hostnameReplacer.Replace(rURL.Host)
565+
} else {
566+
file = path.Base(rURL.Path)
567+
}
562568
}
563569
}
564570

request.go

+1
Original file line numberDiff line numberDiff line change
@@ -675,6 +675,7 @@ func (r *Request) SetOutputFileName(file string) *Request {
675675
// - [Request.SetOutputFileName]
676676
// - Content-Disposition header
677677
// - Request URL using [path.Base]
678+
// - Request URL hostname if path is empty or "/"
678679
//
679680
// It overrides the value set at the client instance level, see [Client.SetSaveResponse]
680681
func (r *Request) SetSaveResponse(save bool) *Request {

request_test.go

+7
Original file line numberDiff line numberDiff line change
@@ -1406,6 +1406,13 @@ func TestRequestSaveResponse(t *testing.T) {
14061406
assertNil(t, err)
14071407
})
14081408

1409+
t.Run("empty path", func(t *testing.T) {
1410+
_, err := c.R().
1411+
SetSaveResponse(true).
1412+
Get(ts.URL)
1413+
assertError(t, err)
1414+
})
1415+
14091416
}
14101417

14111418
func TestContextInternal(t *testing.T) {

0 commit comments

Comments
 (0)