Discord API 告诉我:“401:未经授权”当我使用 Google-Scripts 进行 GET 时:"UrlFetchApp.fetch()"
Discord API tells me: "401: Unauthorized" when i make a GET with Google-Scripts: "UrlFetchApp.fetch()"
我正在设置 api 连接。我想为我的应用从 discord api 获取信息。
所以我实现了 OAuth2 没有任何问题,我有我的访问令牌。然后我尝试查询一些端点 (/users/@me, /users/@me/guilds,...) 但每次我都会遇到同样的错误。
我在 headers 中发送我的授权令牌,但它仍然返回错误 401。
这是我的 "authentication code":
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);
}
}
我接受与具有相同范围的 discord 的连接:确定。
我很努力,但我没有成功。每次都是同样的错误:
{"code": 0, "message": "401: Unauthorized"}
您正在将 header 作为 params
/options
参数发送到 UrlFetchApp.fetch()
。发送 header 作为 options
中的 header 参数:
var resultUsers = UrlFetchApp.fetch(API_USERS_URL,{headers: header2});
我正在设置 api 连接。我想为我的应用从 discord api 获取信息。
所以我实现了 OAuth2 没有任何问题,我有我的访问令牌。然后我尝试查询一些端点 (/users/@me, /users/@me/guilds,...) 但每次我都会遇到同样的错误。
我在 headers 中发送我的授权令牌,但它仍然返回错误 401。
这是我的 "authentication code":
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);
}
}
我接受与具有相同范围的 discord 的连接:确定。
我很努力,但我没有成功。每次都是同样的错误:
{"code": 0, "message": "401: Unauthorized"}
您正在将 header 作为 params
/options
参数发送到 UrlFetchApp.fetch()
。发送 header 作为 options
中的 header 参数:
var resultUsers = UrlFetchApp.fetch(API_USERS_URL,{headers: header2});