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 身份验证