package basic_http import ( "context" "fmt" "io" "net" "net/http" "strings" "dnsupdater/ip" ) type Service struct { ServiceName string Url string Headers http.Header } func (s Service) Name() string { return s.ServiceName } func (s Service) Lookup(ctx context.Context) (net.IP, error) { req, err := http.NewRequestWithContext(ctx, "GET", s.Url, nil) if err != nil { return nil, err } req.Header = s.Headers resp, err := http.DefaultClient.Do(req) if err != nil { return nil, err } if resp.StatusCode < 200 || resp.StatusCode >= 300 { return nil, fmt.Errorf("HTTP Response: %s", resp.Status) } body, err := io.ReadAll(resp.Body) if err != nil { return nil, err } // Trim spaces and stuff. ip_str := strings.TrimSpace(string(body)) return ip.ParseIP(ip_str) }