当我使用Google-Scripts进行GET时,Discord API告诉我:“401:未经授权”:“UrlFetchApp.fetch()”

问题描述 投票:1回答:1

我正在建立一个api连接。我想从discord api获取我的应用程序的信息。

所以我实现了OAuth2没有任何问题,我有我的访问令牌。然后我尝试查询一些端点(/ users / @ me,/ users / @ me / guilds,...)但每次我都得到同样的错误。

我在标头中发送我的授权令牌,但它仍然返回错误401。

我用生成的url调用脚本:https://discordapp.com/api/oauth2/authorize?client_id=XYZ&redirect_uri=https%3A%2F%2Fscript.google.com%2Fmacros%2Fs%2FAKfycbyyt9-FiVv0zXOr8p8pMfojwEs2AXvBftVN1xdWeU3UQ1xgURD%2Fexec&response_type=code&scope=identify

这是我的“身份验证码”:

function doGet(e){
  if(typeof e.parameter.code !== 'undefined') {
    var code = e.parameter.code;
    getAccessToken(code);
  }
  return ContentService.createTextOutput('someThink..');
}

function getAccessToken(code){
  var API_TOKEN_URL = 'https://discordapp.com/api/oauth2/token'
  var CLIENT_ID = 'XYZ'
  var CLIENT_SECRET = 'XYZ'
  var REDIRECT_URI = 'https://script.google.com/macros/s/AKfycbyyt9-FiVv0zXOr8p8pMfojwEs2AXvBftVN1xdWeU3UQ1xgURD/exec'
  data = {
    'client_id': CLIENT_ID,
    'client_secret': CLIENT_SECRET,
    'grant_type': 'authorization_code',
    'code': code,
    'redirect_uri': REDIRECT_URI,
    'scope': 'identify'
  }
  header = {
    'method' : 'post',
    'Content-Type': 'application/x-www-form-urlencoded',
    'payload' : data
  }
  var result = UrlFetchApp.fetch(API_TOKEN_URL, header);
  if (result.getResponseCode() == 200) {
    var params = JSON.parse(result.getContentText());
    Logger.log(params.access_token); // all is fine
    getUser(params.access_token, params.token_type)
  }  
}

这段代码是我的API请求:

function getUser(accessToken, token_type){
  var API_USERS_URL = 'https://discordapp.com/api/users/@me'; 
  header2 = {
    'method' : 'GET',
    'Authorization': token_type + ' ' + accessToken,
    // I tested all of them
    // 'followRedirects' : true,
    // 'muteHttpExceptions': true,
    // 'Content-Type': 'application/json',
    // 'Content-Type': 'application/x-www-form-urlencoded',
  }
  var resultUsers = UrlFetchApp.fetch(API_USERS_URL, header2); // ERROR HERE !
  if (resultUsers.getResponseCode() == 200) {
    var paramsUser = JSON.parse(result.getContentText());
    Logger.log(paramsUser);
  }  
}

我接受与同一SCOPES不一致的连接:识别。

我努力了但是我没有成功。每次出现同样的错误:

{"code": 0, "message": "401: Unauthorized"}
google-apps-script oauth-2.0 discord http-status-code-401
1个回答
1
投票

您将标题作为params / options参数发送到UrlFetchApp.fetch()。在options中将标头作为标头参数发送:

var resultUsers = UrlFetchApp.fetch(API_USERS_URL,{headers: header2});
© www.soinside.com 2019 - 2024. All rights reserved.