· 9 years ago · Oct 27, 2016, 03:54 AM
1OAuth oauth_consumer_key="<directly from twitter>", oauth_nonce="QVtTTIJY4DKZzpp6vTcABSUUWQdlizspPgvgaXfCq0g", oauth_signature="Ll9nUfTv3x*******xCNoWYkN3s=", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1477539183", oauth_token="<directly from twitter>", oauth_version="1.0"
2
3reg, _ := regexp.Compile("[^a-zA-Z0-9-]")
4randomBytes := make([]byte, 32)
5if _, err := rand.Read(randomBytes); err != nil {
6 panic(err)
7}
8nonce := base64.StdEncoding.EncodeToString(randomBytes)
9
10func QEscape(toEscape string) string {
11 return url.QueryEscape(toEscape)
12}
13
14header.SigningKey = QEscape(string(consumerSecret)) + "&" + QEscape(string(accessTokenSecret)) //These values are directly from Twitter
15header.PartialBaseString = "POST&" + QEscape("https://api.twitter.com/1.1/statuses/update.json") + "&"
16
17paramString := "oauth_consumer_key=" + QEscape(header.ConsumerKey)
18paramString += "&oauth_nonce=" + QEscape(header.Nonce)
19paramString += "&oauth_signature_method=" + header.SignatureMethod
20paramString += "&oauth_timestamp=" + header.Timestamp
21paramString += "&oauth_token=" + QEscape(header.Token)
22paramString += "&oauth_version=" + header.Version
23paramString += "&status=" + status
24
25base := []byte(header.PartialBaseString + QEscape(paramString))
26h := hmac.New(sha1.New, []byte(header.SigningKey))
27h.Write(base)
28header.Signature = base64.StdEncoding.EncodeToString(h.Sum(nil))
29
30func GetCompleteHeaderString(header Header) string {
31 headerString := "OAuth "
32 headerString += "oauth_consumer_key="" + QEscape(header.ConsumerKey) + "", "
33 headerString += "oauth_nonce="" + QEscape(header.Nonce) + "", "
34 headerString += "oauth_signature="" + header.Signature + "", "
35 headerString += "oauth_signature_method="" + header.SignatureMethod + "", "
36 headerString += "oauth_timestamp="" + header.Timestamp + "", "
37 headerString += "oauth_token="" + QEscape(header.Token) + "", "
38 headerString += "oauth_version="" + header.Version + """
39 return headerString
40}
41
42client := &http.Client{}
43req, err := http.NewRequest("POST", "https://api.twitter.com/1.1/statuses/update.json?status=" + status, nil)
44if err != nil {
45 panic(err)
46}
47headerString := GetCompleteHeaderString(header)
48req.Header.Add("Authorization", headerString)
49res, err := client.Do(req)
50//...