Oauth2 (Twitter) не може да работи - връща невалиден токен

Така че аз съм малко начинаещ в Go, така че извинете невежеството ми. Опитвам се да направя просто извикване на REST API към twitter, използвайки oauth2 за извиквания „само за приложение“, но продължавам да получавам „Невалиден или изтекъл токен“ като грешка.

Някой има ли опит с настройването на нещо подобно?

Отговорът е: {"грешки":[{"code":89,"message":"Невалиден или изтекъл токен."}]}

package main

import "fmt"
import "encoding/base64"
import "io/ioutil"
import "time"
import "golang.org/x/oauth2"

func main() {
    config := &oauth2.Config{
        Endpoint: oauth2.Endpoint{
            AuthURL: "https://api.twitter.com/oauth2/token",
            TokenURL: "https://api.twitter.com/oauth/request_token",
        },
    }
    accessToken := base64.StdEncoding.EncodeToString([]byte("{Consumer Key (API Key)}:{Consumer Secret (API Secret)}"));
    token := &oauth2.Token{
        AccessToken: accessToken, 
        Expiry: time.Now().Add(time.Duration(24)*time.Hour)
    }
    httpClient := config.Client(oauth2.NoContext, token)
    resp, err := httpClient.Get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=google")
    if (err != nil) {
        fmt.Printf("Error: %s", err)
    }
    defer resp.Body.Close();
    body, err :=  ioutil.ReadAll(resp.Body);
    if (err != nil) {
        fmt.Printf("Error: %s", err)
    }
    fmt.Printf("Access Token: %s\nToken: %s\nResponse: %s\n", accessToken, token, body)
}

person Christopher    schedule 13.01.2016    source източник


Отговори (1)


Така се оказа, че не използвах пакета oauth2 за идентификационни данни на клиента. Успях да го накарам да работи.

Надявам се това да помогне на някого в бъдеще:

package main

import "fmt"
import "io/ioutil"
import "golang.org/x/oauth2"
import "golang.org/x/oauth2/clientcredentials"

func main() {
    config := &clientcredentials.Config{
        ClientID:     "{App Key}",
        ClientSecret: "{App Secret}",
        TokenURL:     "https://api.twitter.com/oauth2/token",
    }
    tok, err := config.Token(oauth2.NoContext)
    httpClient := config.Client(oauth2.NoContext)
    resp, err := httpClient.Get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=google")
    if (err != nil) {
        fmt.Printf("Error: %s", err)
    }
    defer resp.Body.Close();
    body, err :=  ioutil.ReadAll(resp.Body);
    if (err != nil) {
        fmt.Printf("Error: %s", err)
    }
    fmt.Printf("Access Token: %s\nToken: %s\nResponse: %s\n", tok, body)
}
person Christopher    schedule 14.01.2016