func Post(paths ...string) Option {
	return Method(http.MethodPost, paths...)
}
Post sets the HTTP method to "POST".  Optional path arguments
will be applied via the RelativeURL option.
package requester
import (
	"encoding/base64"
	"net/http"
	"net/url"
	"strings"
	"unicode"
	"github.com/ansel1/merry"
	"github.com/gemalto/requester/httpclient"
	goquery "github.com/google/go-querystring/query"
)
const (
	HeaderAccept        = "Accept"
	HeaderContentType   = "Content-Type"
	HeaderAuthorization = "Authorization"
	HeaderRange         = "Range"
	MediaTypeJSON          = "application/json"
	MediaTypeXML           = "application/xml"
	MediaTypeForm          = "application/x-www-form-urlencoded"
	MediaTypeOctetStream   = "application/octet-stream"
	MediaTypeTextPlain     = "text/plain"
	MediaTypeMultipart     = "multipart/mixed"
	MediaTypeMultipartForm = "multipart/form-data"
)
type Option interface {
	Apply(*Requester) error
}
type OptionFunc func(*Requester) error
func (f OptionFunc) Apply(r *Requester) error {
	return f(r)
}
func (r *Requester) With(opts ...Option) (*Requester, error) {
	r2 := r.Clone()
	err := r2.Apply(opts...)
	if err != nil {
		return nil, err
	}
	return r2, nil
}
func (r *Requester) MustWith(opts ...Option) *Requester {
	if r2, err := r.With(opts...); err != nil {
		panic(err)
	} else {
		return r2
	}
}
func (r *Requester) Apply(opts ...Option) error {
	for _, o := range opts {
		err := o.Apply(r)
		if err != nil {
			return merry.Prepend(err, "applying options")
		}
	}
	return nil
}
func (r *Requester) MustApply(opts ...Option) {
	if err := r.Apply(opts...); err != nil {
		panic(err)
	}
}
func Method(m string, paths ...string) Option {
	return OptionFunc(func(r *Requester) error {
		r.Method = m
		if len(paths) > 0 {
			err := RelativeURL(paths...).Apply(r)
			if err != nil {
				return err
			}
		}
		return nil
	})
}
func Head(paths ...string) Option {
	return Method(http.MethodHead, paths...)
}
func Get(paths ...string) Option {
	return Method(http.MethodGet, paths...)
}