http.go
func (client *Client) SignedURL(route string, query url.Values, duration time.Duration) (u *url.URL, err error) {
	u, err = setURL(client, route, query)
	if err != nil {
		return
	}
	credentials := &hawk.Credentials{
		ID:   client.Credentials.ClientID,
		Key:  client.Credentials.AccessToken,
		Hash: sha256.New,
	}
	reqAuth, err := hawk.NewURLAuth(u.String(), credentials, duration)
	if err != nil {
		return
	}
	reqAuth.Ext, err = getExtHeader(client.Credentials)
	if err != nil {
		return
	}
	bewitSignature := reqAuth.Bewit()
	if query == nil {
		query = url.Values{}
	}
	query.Set("bewit", bewitSignature)
	u.RawQuery = query.Encode()
	return
}
func (client *Client) SignedURL(route string, query url.Values, duration time.Duration) (u *url.URL, err error) {
	u, err = setURL(client, route, query)
	if err != nil {
		return
	}
	credentials := &hawk.Credentials{
		ID:   client.Credentials.ClientID,
		Key:  client.Credentials.AccessToken,
		Hash: sha256.New,
	}
	reqAuth, err := hawk.NewURLAuth(u.String(), credentials, duration)
	if err != nil {
		return
	}
	reqAuth.Ext, err = getExtHeader(client.Credentials)
	if err != nil {
		return
	}
	bewitSignature := reqAuth.Bewit()
	if query == nil {
		query = url.Values{}
	}
	query.Set("bewit", bewitSignature)
	u.RawQuery = query.Encode()
	return
}
// SignedURL creates a signed URL using the given Client, where route is the
// url path relative to the BaseURL stored in the Client, query is the set of
// query string parameters, if any, and duration is the amount of time that the
// signed URL should remain valid for.