我无法使用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)}
答案 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/并按照该页面进行操作。
希望有所帮助!