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

Posted

技术标签:

【中文标题】Discord API 告诉我:“401:未经授权”,当我使用 Google 脚本进行 GET 时:“UrlFetchApp.fetch()”【英文标题】:Discord API tells me: "401: Unauthorized" when i make a GET with Google-Scripts: "UrlFetchApp.fetch()" 【发布时间】:2019-09-15 03:19:29 【问题描述】:

我正在建立一个 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"

【问题讨论】:

【参考方案1】:

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

var resultUsers = UrlFetchApp.fetch(API_USERS_URL,headers: header2);

【讨论】:

天哪!你太棒了。非常感谢!

以上是关于Discord API 告诉我:“401:未经授权”,当我使用 Google 脚本进行 GET 时:“UrlFetchApp.fetch()”的主要内容,如果未能解决你的问题,请参考以下文章

使用 EWS API 发送电子邮件方法获取 401 未经授权

LinkedIn 邀请 API 错误 401 [未经授权]-iPhone sdk

使用 Passport 进行 Laravel API 身份验证导致 401(未经授权)

401 未经授权的错误 web api mvc windows 身份验证

将 API 迁移到 .net Core 3 时出现 JWT 401 未经授权的错误

烧瓶不和谐 api 错误 “消息”:“401:未经授权”,“代码”:0