В настоящее время я пытаюсь взаимодействовать с API-интерфейсом OAuth с помощью команды curl curl -u {client_id}:{client_secret} -d grant_type=client_credentials https://us.battle.net/oauth/token
. Мой текущий файл go:
package main
import (
"bytes"
"fmt"
"mime/multipart"
"net/http"
)
func checkErr(err error) bool {
if err != nil {
panic(err)
}
return true
}
func authcode(id string, secret string, cli http.Client) string {
//un(trace("authcode"))
var form bytes.Buffer
w := multipart.NewWriter(&form)
_, err := w.CreateFormField("grant_type=client_credentials")
checkErr(err)
req, err := http.NewRequest("POST", "https://us.battle.net/oauth/token", &form)
checkErr(err)
req.SetBasicAuth(id, secret)
resp, err := cli.Do(req)
checkErr(err)
defer resp.Body.Close()
json := make([]byte, 1024)
_, err = resp.Body.Read(json)
checkErr(err)
return string(json)
}
func main() {
//un(trace("main"))
const apiID string = "user"
const apiSecret string = "password"
apiClient := &http.Client{}
auth := authcode(apiID, apiSecret, *apiClient)
fmt.Printf("%s", auth)
}
Когда я запускаю это, я получаю ответ {"error":"invalid_request","error_description":"Missing grant type"}
Для справки: состояние потока API:
«Чтобы запросить токены доступа, приложение должно сделать запрос POST со следующими данными многочастной формы к URI токена: grant_type = client_credentials
Приложение должно передать базовые учетные данные HTTP-аутентификации, используя client_id в качестве пользователя и client_secret в качестве пароля. "
ожидаемый ответ - строка json, содержащая токен доступа, тип токена, срок действия в секундах и объем функций, доступных с указанным токеном