无法使用golang获取box api的访问令牌

时间:2015-02-13 12:41:57

标签: go

我无法使用golang获取box api的访问令牌。

这是我的代码:

// box project main.go

package main

import ("bytes" "encoding/json" "fmt" "io" "io/ioutil" "log" "net/http" "net/url"
)

type accessinfo struct {access_token  string expires_in   int64 token_type    string refresh_token string}

var accessobj accessinfo

func try(w http.ResponseWriter, r *http.Request) {io.WriteString(w, "hello,world!\n")if r.Method == "GET" {w.Header().Set("Content-Type", "text/plain")w.Write([]byte("This is an example.\n"))code := r.FormValue("code")fmt.Println("gvshnbc")fmt.Println(code)authToken(code)dat, err := ioutil.ReadAll(r.Body)if dat == nil {log.Print("no data")} log.Print(string(dat))if err != nil {log.Print("no error")}}}func authToken(code string) {apiUrl := "https://app.box.com/api"///resource := "/oauth2/token"    data := url.Values{    data.Set("grant_type", "authorization_code")data.Add("code", code)fmt.Println(code) data.Add("client_id", "rnk5pqyahzrkf6bxwtc79rcief8u76p6")//data.Add("redirect_uri", "http://localhost:8089")data.Add("client_secret", "7xbeJvi76oc0IcHmfcUzZZPP9b0jVbDs")//data.Add("state", "authenticated") //fmt.Println(data)    u, _ := url.ParseRequestURI(apiUrl)//    u.Path = resource
fmt.Println(u)    urlStr := fmt.Sprintf("%v", u)    fmt.Println(urlStr)    client := &http.Client{}    //fmt.Println(client)    r, err := http.NewRequest("POST", urlStr, bytes.NewBufferString(data.Encode()))    if err != nil {        panic(err)
//break    }    //r.Header.Add("Content-Type", "application/x-www-form-urlencoded")    //r.Header.Add("Content-Length", "9")fmt.Println(r)    if err != nil {        fmt.Println(err)    }
    //fmt.Println(bytes.NewBufferString(data.Encode()))//fmt.Println(data.Encode())//fmt.Println(r)resp, err := client.Do(r)    if err != nil {        fmt.Println(err)    }    //fmt.Println(resp)    re, err := ioutil.ReadAll(resp.Body)    if err != nil {        fmt.Println("error")        fmt.Println(string(re))    }a := json.Unmarshal(re, &accessobj)fmt.Println(a)}

1 个答案:

答案 0 :(得分:1)

首先,您可能希望从发布的代码中删除ClientID和ClientSecret。

其次,您可能最好使用已存在的OAuth2实现code.google.com/p/goauth2/oauth非常好。)

至于为什么你的代码不起作用,你粘贴的代码不完整代码(缺少一些结束大括号 - data := url.Values{未公开)。此外,你应该定义一个main函数 - 没有它你的go代码不会运行(除非有其他代码使用这个代码,上面没有粘贴)。如果你想要一个go代码的例子,它可以获得一个Box API令牌(这里是无耻的插件),我在go中为一个初步的Box Client写了一堆东西(我从来没有完成它)。这个小主要将帮助您获得一个令牌:https://github.com/ttacon/box/blob/master/boxtoken/boxtoken.go

要运行它,只需cd进入它所在的目录并运行:

go run boxtoken.go -cid=YOUR_CLIENT_ID -csec=YOUR_CLIENT_SECRET

然后转到http://localhost:8080/并按照该页面进行操作。

希望有所帮助!