Simone Basso dba861d262
feat(httpx): implement optional body logging also on http error ()
1. we want optionally to log the body (we don't want to log the body
when we're fetching psiphon secrets or tor targets)

2. we want body logging to _also_ happen on error since this is quite
useful to debug possible errors when accessing the API

This diff adds the above functionality, which were previously
described in https://github.com/ooni/probe/issues/1951.

This diff also adds comprehensive testing.
2022-01-05 16:26:51 +01:00

38 lines
1.0 KiB
Go

package probeservices
import (
"context"
"fmt"
"net/url"
"strings"
"github.com/ooni/probe-cli/v3/internal/model"
)
type urlListResult struct {
Results []model.OOAPIURLInfo `json:"results"`
}
// FetchURLList fetches the list of URLs used by WebConnectivity. The config
// argument contains the optional settings. Returns the list of URLs, on success,
// or an explanatory error, in case of failure.
func (c Client) FetchURLList(ctx context.Context, config model.OOAPIURLListConfig) ([]model.OOAPIURLInfo, error) {
query := url.Values{}
if config.CountryCode != "" {
query.Set("country_code", config.CountryCode)
}
if config.Limit > 0 {
query.Set("limit", fmt.Sprintf("%d", config.Limit))
}
if len(config.Categories) > 0 {
query.Set("category_codes", strings.Join(config.Categories, ","))
}
var response urlListResult
err := c.APIClientTemplate.WithBodyLogging().Build().GetJSONWithQuery(ctx,
"/api/v1/test-list/urls", query, &response)
if err != nil {
return nil, err
}
return response.Results, nil
}