代码拉取完成,页面将自动刷新
package client
import (
	"fmt"
	"gitee.com/wuzheng0709/backend-gopkg/infrastructure/pkg/live/aliyun-live-go-sdk/util"
	"net/http"
	"net/url"
	"time"
)
// 常量
const (
	DefaultSignatureVersion = "1.0"
	DefaultSignatureMethod  = "HMAC-SHA1"
	JSONResponseFormat      = "JSON"
	XMLResponseFormat       = "XML"
	ECSRequestMethod        = "GET"
)
// 请求接口
//
//	所有请求对象继承的接口,也是Client接受处理的请求接口
//	签名方式和必要参数信息。
type Request interface {
	//签名
	Sign(*Credentials)
	//返回*http.Request
	HttpRequestInstance() (*http.Request, error)
	//返回值的类型,支持JSON与XML.
	ResponseFormat() string
	//
	String() string
	//
	Clone() interface{}
	////返回请求处理超时限制时长
	//DeadLine() time.Duration
}
//type BaseRequest struct {
//}
//
//func (b *BaseRequest)Sign(accessKeyId, accessKeySecret string) {
//}
//
//func (b *BaseRequest)HttpRequestInstance() (*http.Request, error) {
//	return nil, nil
//}
//
//func (b BaseRequest)ResponseFormat() string {
//	return JSONResponseFormat
//}
//// A Timeout of zero means no timeout.
//func (b BaseRequest)DeadLine() time.Duration {
//	return 0
//}
//	cdn 请求对象。实现 Request 接口
//
// 名称	类型	是否必须	描述
// Format	String	否	返回值的类型,支持JSON与XML。默认为XML \n
// Version	String	是	API版本号,为日期形式:YYYY-MM-DD,本版本对应为2014-11-11 \n
// AccessKeyId	String	是	阿里云颁发给用户的访问服务所用的密钥ID \n
// Signature	String	是	签名结果串,关于签名的计算方法,请参见签名机制。\n
// SignatureMethod	String	是	签名方式,目前支持HMAC-SHA1 \n
// Timestamp	String	是	请求的时间戳。日期格式按照ISO8601标准表示,并需要使用UTC时间。格式为:YYYY-MM-DDThh:mm:ssZ。例如,2014-11-11T12:00:00Z(为北京时间2014年11月11日20点0分0秒)\n
// SignatureVersion	String	是	签名算法版本,目前版本是1.0 \n
// SignatureNonce	String	是	唯一随机数,用于防止网络重放攻击。用户在不同请求间要使用不同的随机数值 \n
type CDNRequest struct {
	Format           string
	Version          string
	AccessKeyId      string
	Signature        string
	SignatureMethod  string
	Timestamp        util.ISO6801Time
	SignatureVersion string
	SignatureNonce   string
	// ResourceOwnerAccount string
	Action string
	// http
	Host   string
	Method string
	Url    string
	Args   url.Values
}
// CDNRequest的必要字段转成参数
func (Cdn *CDNRequest) StructToArgs() {
	Cdn.SignatureNonce = util.CreateRandomString()
	//Cdn.Timestamp = util.NewISO6801Time(time.Now().UTC())
	Cdn.Args.Set("Format", Cdn.Format)
	Cdn.Args.Set("Version", Cdn.Version)
	Cdn.Args.Set("AccessKeyId", Cdn.AccessKeyId)
	Cdn.Args.Set("SignatureMethod", Cdn.SignatureMethod)
	Cdn.Args.Set("Timestamp", Cdn.Timestamp.String())
	Cdn.Args.Set("SignatureVersion", Cdn.SignatureVersion)
	Cdn.Args.Set("SignatureNonce", Cdn.SignatureNonce)
	Cdn.Args.Set("Action", Cdn.Action)
}
// 签名
func (Cdn *CDNRequest) Sign(cert *Credentials) {
	Cdn.AccessKeyId = cert.AccessKeyId
	Cdn.StructToArgs()
	// 生成签名
	Cdn.Signature = util.CreateSignatureForRequest(Cdn.Method, &Cdn.Args, cert.AccessKeySecret+"&")
}
func (Cdn *CDNRequest) HttpRequestInstance() (httpReq *http.Request, err error) {
	// 生成请求url
	Cdn.Url = Cdn.Host + "?" + Cdn.Args.Encode() + "&Signature=" + url.QueryEscape(Cdn.Signature)
	httpReq, err = http.NewRequest(Cdn.Method, Cdn.Url, nil)
	return
}
func (Cdn *CDNRequest) ResponseFormat() string {
	return Cdn.Format
}
// A Timeout of zero means no timeout.
func (Cdn *CDNRequest) DeadLine() time.Duration {
	return 0
}
func (Cdn *CDNRequest) String() string {
	return fmt.Sprintf("Method:%s,Url:%s", Cdn.Method, Cdn.Url)
}
// 克隆
func (l *CDNRequest) Clone() interface{} {
	new_obj := (*l)
	//清空数据
	new_obj.Args = url.Values{}
	return &new_obj
}
func (Cdn *CDNRequest) SetArgs(key, value string) {
	Cdn.Args.Set(key, value)
}
func (Cdn *CDNRequest) DelArgs(key string) {
	Cdn.Args.Del(key)
}
const (
	ApiCDNVersion = "2014-11-11"
	ApiCDNHost    = "https://cdn.aliyuncs.com/"
)
// 生成CDNRequest
func NewCDNRequest(action string) *CDNRequest {
	return &CDNRequest{
		Format:           JSONResponseFormat,
		Version:          ApiCDNVersion,
		SignatureNonce:   util.CreateRandomString(),
		SignatureMethod:  DefaultSignatureMethod,
		SignatureVersion: DefaultSignatureVersion,
		Timestamp:        util.NewISO6801Time(time.Now().UTC()),
		Action: action,
		Host:   ApiCDNHost,
		Method: ECSRequestMethod,
		Args:   url.Values{},
	}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
 马建仓 AI 助手
马建仓 AI 助手