/* 请求结构简介 最近更新时间:2019-08-01 19:14:44 编辑 查看pdf 在这篇文章中: 服务地址 通信协议 请求方法 请求参数 字符编码 对腾讯云的 API 接口的调用是通过向腾讯云 API 的服务端地址发送请求,并按照接口说明在请求中加入相应的请求参数来完成的。腾讯云 API 的请求结构由:服务地址、通信协议、请求方法、请求参数和字符编码组成。具体描述如下: 服务地址 腾讯云 API 的服务接入地址与具体模块相关,详细请参见各接口相关描述。 通信协议 腾讯云 API 的大部分接口都通过 HTTPS 进行通信,为您提供高安全性的通信通道。 请求方法 腾讯云 API 同时支持 POST 和 GET 请求。 注意: POST 和 GET 请求不能混合使用,若使用 GET 方式,则参数均从 Querystring 取得; 若使用 POST 方式,则参数均从 Request Body 中取得,而 Querystring 中的参数将忽略。 两种请求方式的参数格式规则相同,一般情况下使用 GET 请求,当参数字符串过长时推荐使用 POST。 如果用户的请求方法是 GET,则对所有请求参数值均需要做 URL 编码,若为 POST,则无需对参数编码。 GET 请求的最大长度根据不同的浏览器和服务器设置有所不同,例如,传统 IE 浏览器限制为 2K,Firefox 限制为 8K;对于一些参数较多、长度较长的 API 请求,建议您使用 POST 方法以免在请求过程中会由于字符串超过最大长度而导致请求失败。 对于 POST 请求,您需要使用 x-www-form-urlencoded 的形式传参,因为云 API 侧是从 $_POST 中取出请求参数的。 请求参数 腾讯云 API 的每个请求都需要指定两类参数:公共请求参数以及接口请求参数。其中公共请求参数是每个接口都要用到的请求参数,具体可参见 公共请求参数,而接口请求参数是各个接口所特有的,具体见各个接口的“请求参数”描述。 字符编码 腾讯云 API 的请求及返回结果均使用 UTF-8 字符集进行编码。 */ package model import ( "fmt" "time" "goutil/mathUtil" ) // CommonRequest 公共请求参数对象 type CommonRequest struct { // Action 指令接口名称(必须) Action string // 地域参数(必须) Region string // Timestamp 当前UNIX时间戳(必须) Timestamp uint64 // Nonce 随机正整数(必须) Nonce uint32 // SecretId 在云API密钥上申请的标识身份的SecretId(必须) SecretId string // 请求签名,用来验证此次请求的合法性,需要用户根据实际的输入参数计算得出。 Signature string // 签名方式,目前支持 HmacSHA256 和 HmacSHA1。只有指定此参数为 HmacSHA256 时,才使用 HmacSHA256 算法验证签名,其他情况均使用 HmacSHA1 验证签名。 SignatureMethod string // 队列名称(此属性虽然不是API文档中的公共属性,但是在队列模型中确实事实上的公共属性,所以将其转移到此处) queueName string } // AssembleParamMap 组装请求参数字典 // 返回值 // map[string]interface{}:请求参数字 func (this *CommonRequest) AssembleParamMap() map[string]string { result := make(map[string]string) // 组装参数 result["Action"] = this.Action result["Region"] = this.Region result["Timestamp"] = fmt.Sprintf("%d", this.Timestamp) result["Nonce"] = fmt.Sprintf("%d", this.Nonce) result["SecretId"] = this.SecretId result["SignatureMethod"] = this.SignatureMethod result["queueName"] = this.queueName return result } // NewCommonRequest 新建公共请求参数对象 // 参数 // action:指令接口名称 // region:地域 // secretId:在云API密钥上申请的标识身份的SecretId // queueName:队列名称 // 返回值 // *CommonRequest:公共请求参数对象 func NewCommonRequest(action, region, secretId, queueName string) *CommonRequest { return &CommonRequest{ Action: action, Region: region, Timestamp: uint64(time.Now().Unix()), Nonce: mathUtil.GetRand().Uint32(), SecretId: secretId, SignatureMethod: "HmacSHA256", queueName: queueName, } }