Files
webarchive/adapters/processors/headers.go

58 lines
1.1 KiB
Go

package processors
import (
"bytes"
"context"
"fmt"
"net/http"
"github.com/derfenix/webarchive/entity"
)
func NewHeaders(client *http.Client) *Headers {
return &Headers{client: client}
}
type Headers struct {
client *http.Client
}
func (h *Headers) Process(ctx context.Context, url string, _ *entity.Cache) ([]entity.File, error) {
var (
headersFile entity.File
err error
)
req, reqErr := http.NewRequestWithContext(ctx, http.MethodHead, url, nil)
if reqErr != nil {
return nil, fmt.Errorf("create request: %w", reqErr)
}
resp, doErr := h.client.Do(req)
if doErr != nil {
return nil, fmt.Errorf("call url: %w", doErr)
}
if resp.Body != nil {
_ = resp.Body.Close()
}
headersFile, err = h.newFile(resp.Header)
if err != nil {
return nil, fmt.Errorf("new file from headers: %w", err)
}
return []entity.File{headersFile}, nil
}
func (h *Headers) newFile(headers http.Header) (entity.File, error) {
buf := bytes.NewBuffer(nil)
if err := headers.Write(buf); err != nil {
return entity.File{}, fmt.Errorf("write headers: %w", err)
}
return entity.NewFile("headers", buf.Bytes()), nil
}