package main import ( "fmt" "io/ioutil" "net/http" "net/url" "time" "math/rand" "strconv" "crypto/sha1" "crypto/hmac" "encoding/base64" ) /* * keyStr 密钥 * value 消息内容 */ func HMACSHA1(keyStr, value string) string{ key := []byte(keyStr) mac := hmac.New(sha1.New, key) mac.Write([]byte(value)) //进行base64编码 res := base64.StdEncoding.EncodeToString(mac.Sum(nil)) return res } func main() { curUTC := time.Now().UTC().Format("2006-01-02T15:04:05Z") signature := rand.New(rand.NewSource(time.Now().Unix())).Int63() httpMethod := "AccessKeyId=LTAILUL4ts0XZgY5" + "&Action=CheckDomain" + "&DomainName=abc.com" + "&Format=JSON" + "&SignatureMethod=HMAC-SHA1" + "&SignatureNonce=" + strconv.Itoa(int(signature)) + "&SignatureVersion=1.0" + "&Timestamp=" + url.QueryEscape(curUTC) + "&Version=2016-05-11" StringToSign := "GET&"+url.QueryEscape("/") + "&" + url.QueryEscape(httpMethod) url := "http://domain.aliyuncs.com/?" + httpMethod + "&Signature=" + HMACSHA1("LTAILUL4ts0XZgY5&", StringToSign) fmt.Println("url:", url) fmt.Println("curUTC:", curUTC) fmt.Println("signature:",signature) fmt.Println("StringToSign",StringToSign) resp, err := http.Get(url) if err != nil { fmt.Println(err) return } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) fmt.Println(string(body)) fmt.Println(resp.StatusCode) if resp.StatusCode == 200 { fmt.Println("ok") } }