【问题标题】:How to request access token for Reddit on Google Apps Script如何在 Google Apps 脚本上为 Reddit 请求访问令牌
【发布时间】:2021-04-30 22:29:51
【问题描述】:

我一直试图弄清楚如何在 Google Apps 脚本中从 Reddit API 获取访问令牌。到目前为止,我已经编写了以下代码:

function main() {
  
  var username = 'myredditusername';
  var pwd = 'myredditpassword';
  var client_id = 'myredditclientid';
  var client_secret = 'myredditclientsecret';

  var access_token_url = 'https://www.reddit.com/api/v1/access_token';
  var api_url = 'https://oauth.reddit.com/';
  var user_agent = 'MySideProjectUserAgent';

var data = {
  'grant_type': 'password',
  'username': username,
  'password': pwd
};

var options = {
  'method' : 'post',
  'contentType': 'application/json',
  'payload' : JSON.stringify(data),
  'headers': {'User-Agent': user_agent},
  // what do I enter here to pass my client_id and client_secret?    
};

var resp = UrlFetchApp.fetch(access_token_url, options);
console.log(resp.getContentText());
}

运行上面的代码会收到如下错误(这并不奇怪,因为我仍然需要弄清楚如何传入我的client_idclient_secret):

Exception: Request failed for https://www.reddit.com returned code 401. Truncated server response: {"message": "Unauthorized", "error": 401} (use muteHttpExceptions option to examine full response)

在使用curl时,我可以通过以下命令成功获取令牌:

curl -X POST -A 'KeywordTrackAgent' -d "grant_type=password&username=myredditusername&password=myredditpassword" --user 'client_id:client_secret' https://www.reddit.com/api/v1/access_token

从到达 (example post) 开始,我想如果我要将这个 curl 请求转换为 POST 请求,我需要将 Authorization 字段添加到我的 headers 参数中格式如下:

function main() {
  
  var username = 'myredditusername';
  var pwd = 'myredditpassword';
  var client_id = 'myredditclientid';
  var client_secret = 'myredditclientsecret';

  var access_token_url = 'https://www.reddit.com/api/v1/access_token';
  var api_url = 'https://oauth.reddit.com/';
  var user_agent = 'MySideProjectUserAgent';

var data = {
  'grant_type': 'password',
  'username': username,
  'password': pwd
};

var options = {
  'method' : 'post',
  'contentType': 'application/json',
  'payload' : JSON.stringify(data),
  'headers': {
    'User-Agent': user_agent,
    // Below, I decided to encode my client_id and client_secret in base64 with the prefix 'Basic '
    'Authorization': 'Basic clientIdAndClientSecretInBase64',
    },
};

var resp = UrlFetchApp.fetch(access_token_url, options);
console.log(JSON.parse(resp.getContentText()));
}

我仍然收到 { error: 'unsupported_grant_type' }。

任何人——使用 JavaScript 并且最好是使用 Google Apps 脚本成功获取 Reddit 访问令牌的人——可以分享一些建议/见解吗?提前感谢您的回答!

【问题讨论】:

    标签: javascript google-apps-script reddit reddit-access-token


    【解决方案1】:

    我相信你的目标如下。

    • 您希望将以下 curl 命令转换为 Google Apps 脚本。

        curl -X POST -A 'KeywordTrackAgent' -d "grant_type=password&username=myredditusername&password=myredditpassword" --user 'client_id:client_secret' https://www.reddit.com/api/v1/access_token
      

    此 curl 命令将数据作为表单数据发送。并且,使用基本授权。当这些反映到 Google Apps 脚本时,它变成如下。

    示例脚本:

    在此脚本中,使用您的值。

    function main() {
      var username = 'myredditusername';
      var pwd = 'myredditpassword';
      var client_id = 'myredditclientid';
      var client_secret = 'myredditclientsecret';
      var access_token_url = 'https://www.reddit.com/api/v1/access_token';
    
      var data = {
        'grant_type': 'password',
        'username': username,
        'password': pwd
      };
      var options = {
        'method': 'post',
        'payload': data,
        'headers': {
          'Authorization': 'Basic ' + Utilities.base64Encode(`${client_id}:${client_secret}`),
        },
      };
      var resp = UrlFetchApp.fetch(access_token_url, options);
      console.log(JSON.parse(resp.getContentText()));
    }
    
    • 在此脚本中,请求与 curl 命令相同。

    注意:

    • 在这个脚本中,它假设授权的值是正确的。请注意这一点。

    参考:

    【讨论】:

    • 非常感谢!你的建议有效。 :) 我不应该包含'contentType' : 'application/json'stringify() 'payload'。这就是使一切正常的区别。再次感谢!
    • @user1330974 感谢您的回复。我很高兴你的问题得到了解决。也谢谢你。
    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 2020-05-05
    • 2011-10-25
    • 1970-01-01
    相关资源
    最近更新 更多