FILE / ScuroNeko/mtg

ipblocklist/files/http.go

Исходный файл и его история в репозитории.
FILE c14a2329c51275fa13731f246dd862a854dc2d99
Files
mtg/ipblocklist/files/http.go
T
2021-11-29 07:26:27 +03:00

52 lines
921 B
Go

package files
import (
"context"
"fmt"
"io"
"net/http"
"net/url"
)
type httpFile struct {
http *http.Client
url string
}
func (h httpFile) Open(ctx context.Context) (io.ReadCloser, error) {
request, err := http.NewRequestWithContext(ctx, http.MethodGet, h.url, nil)
if err != nil {
panic(err)
}
response, err := h.http.Do(request)
if err != nil {
if response != nil {
io.Copy(io.Discard, response.Body)
response.Body.Close()
}
return nil, fmt.Errorf("cannot get url %s: %w", h.url, err)
}
return response.Body, nil
}
func NewHTTP(client *http.Client, endpoint string) (File, error) {
parsed, err := url.Parse(endpoint)
if err != nil {
return nil, fmt.Errorf("incorrect url %s: %w", endpoint, err)
}
switch parsed.Scheme {
case "http", "https":
default:
return nil, fmt.Errorf("unsupported url %s", endpoint)
}
return httpFile{
http: client,
url: endpoint,
}, nil
}