fix: close response body in FetchHTMLDocument

This commit is contained in:
2026-06-11 11:25:51 +02:00
parent 7f98fbfa7a
commit f32bcf1288
2 changed files with 9 additions and 9 deletions

View File

@@ -346,7 +346,7 @@ func addCommonHeaders(request *http.Request) {
} }
func fetchDocument(ctx context.Context, httpClient *http.Client, url string) (*goquery.Document, string, error) { func fetchDocument(ctx context.Context, httpClient *http.Client, url string) (*goquery.Document, string, error) {
document, response, err := netutil.FetchHTMLDocument(ctx, httpClient, url, addCommonHeaders, func(response *http.Response, body []byte) error { document, finalURL, err := netutil.FetchHTMLDocument(ctx, httpClient, url, addCommonHeaders, func(response *http.Response, body []byte) error {
return &HTTPStatusError{ return &HTTPStatusError{
StatusCode: response.StatusCode, StatusCode: response.StatusCode,
URL: url, URL: url,
@@ -355,10 +355,10 @@ func fetchDocument(ctx context.Context, httpClient *http.Client, url string) (*g
} }
}) })
if err != nil { if err != nil {
return nil, url, err return nil, finalURL, err
} }
return document, response.Request.URL.String(), nil return document, finalURL, nil
} }
type timetableAnimeAPI struct { type timetableAnimeAPI struct {

View File

@@ -15,7 +15,7 @@ func FetchHTMLDocument(
url string, url string,
prepareRequest func(*http.Request), prepareRequest func(*http.Request),
buildStatusError func(*http.Response, []byte) error, buildStatusError func(*http.Response, []byte) error,
) (*goquery.Document, *http.Response, error) { ) (*goquery.Document, string, error) {
client := httpClient client := httpClient
if client == nil { if client == nil {
client = http.DefaultClient client = http.DefaultClient
@@ -23,7 +23,7 @@ func FetchHTMLDocument(
request, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) request, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil)
if err != nil { if err != nil {
return nil, nil, fmt.Errorf("failed to create request: %w", err) return nil, "", fmt.Errorf("failed to create request: %w", err)
} }
if prepareRequest != nil { if prepareRequest != nil {
prepareRequest(request) prepareRequest(request)
@@ -31,19 +31,19 @@ func FetchHTMLDocument(
response, err := client.Do(request) response, err := client.Do(request)
if err != nil { if err != nil {
return nil, nil, fmt.Errorf("request failed: %w", err) return nil, "", fmt.Errorf("request failed: %w", err)
} }
defer func() { _ = response.Body.Close() }() defer func() { _ = response.Body.Close() }()
if response.StatusCode != http.StatusOK { if response.StatusCode != http.StatusOK {
body, _ := io.ReadAll(io.LimitReader(response.Body, Bytes512)) body, _ := io.ReadAll(io.LimitReader(response.Body, Bytes512))
return nil, response, buildStatusError(response, body) return nil, response.Request.URL.String(), buildStatusError(response, body)
} }
document, err := goquery.NewDocumentFromReader(response.Body) document, err := goquery.NewDocumentFromReader(response.Body)
if err != nil { if err != nil {
return nil, response, fmt.Errorf("failed to parse html: %w", err) return nil, response.Request.URL.String(), fmt.Errorf("failed to parse html: %w", err)
} }
return document, response, nil return document, response.Request.URL.String(), nil
} }