【问题标题】:Youtube API Invalid Grant and Required parameter is missing: grant_typeYoutube API 无效授予和必需参数丢失:grant_type
【发布时间】:2014-08-22 16:40:59
【问题描述】:

我在通过 OAuth 使用 Youtube API 进行身份验证时遇到问题。它给了我这个错误:

  • “错误”:CURL 的“invalid_grant”
  • “错误”:“无效请求”,
    "error_description" : GoLang 的“必需参数缺失:grant_type”

这是我的 CURL 代码:

curl -i -X POST "https://accounts.google.com/o/oauth2/token" \ -F 'code=CODE_FROM_MY_USER' \ -F 'client_id=MY_CLIENT_ID' \ -F 'client_secret=MY_CLIENT_SECRET' \ -F 'redirect_uri=http://localhost:8080/platform/youtubeCallback.html' \ -F 'grant_type=authorization_code'

这是我的 Go 代码,已经过验证可用于 Soundcloud API。

func Auth(code string) err {
    v := url.Values{}
    v.Set("code", code)
    v.Set("client_id", "MY_CLIENT_ID")
    v.Set("client_secret", "MY_CLIENT_SECRET")
    v.Set("redirect_uri", "http://localhost:8080/platform/youtubeCallback.html")
    v.Set("grant_type", "authorization_code")

    params := strings.NewReader(v.Encode())

    req, err := http.NewRequest("POST", "https://accounts.google.com/o/oauth2/token", params)
    if err != nil {
        return err
    }
    req.Header.Add("Accept", "application/json")

    resp, err := c.Client.Do(req)
    if err != nil || resp.StatusCode != 200 {
        return err
    }

    json.NewDecoder(resp.Body).Decode(&c.Token)

    return nil
}

【问题讨论】:

    标签: curl oauth go youtube-api


    【解决方案1】:

    原来你需要定义内容类型:

    req.Header.Set("Content-Type", "application/x-www-form-urlencoded")

    【讨论】:

      【解决方案2】:

      如果您创建一个map[string][]string 并将其传递给url.Values,它也可以工作,例如:

      namesToSend := map[string][]string{
        "firstname":{Bob}
      }
      values := url.Values{}
      values = namesToSend
      

      然后在 .NewRequest() 中传递它,就像传递参数一样。

      req, err := http.NewRequest("POST", "https://accounts.google.com/o/oauth2/token", values)
      if err != nil {
          return err
      }
      

      【讨论】:

        猜你喜欢
        • 2021-10-07
        • 1970-01-01
        • 2012-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-14
        • 2017-12-01
        • 2020-12-04
        相关资源
        最近更新 更多