使用UrlFetchApp从https://discord.com寻址端点时出现错误403

问题描述

discord最近宣布,他们将其API从discordapp.com移至discord.com。

我正在重写我的一些代码(Google Apps Script项目)来解决这个问题,但是我遇到了无法访问discord.com端点的问题,例如:

function example(){
  var headers =
  {
    "Authorization": "Bot AbCdEfG123","Accept": "*/*"
  };
  var options =
  {
    "method": "GET","headers": headers,};
  var response = UrlFetchApp.fetch("https://discord.com/api/guilds/"+GUILD_ID+"/members/"+MEMBER_ID,options);
}

即使使用旧的discordapp.com也可以很好地工作。 使用discord.com会导致403错误,而使用error code 1020

进一步调查:

  • 通过Postman或curl执行相同的请求(针对discord.com)是成功的,因此问题似乎出在UrlFetchApp上
  • 通过在标题添加"Accept": "*/*",我发现错误来自Cloudflare,以及消息Please enable cookies
  • 将User-Agent添加到标头,例如"User-Agent": "MyBot/1.0"没有任何改变

我不知道该如何处理,我想知道是否还有其他人遇到过此问题。感谢您的帮助。

编辑:

以下是所需的文档:

起作用的卷曲代码

curl -H "Authorization: Bot [...]" "https://discord.com/api/guilds/[...]/members/[...]"

带有表示令牌或ID的省略号[...]

修改2:

Google Apps脚本使用以下不可修改用户代理:

Mozilla/5.0 (compatible; Google-Apps-Script; beanserver; +https://script.google.com; id: [...])

即使我仅将Mozilla部件纳入curl命令中,即

curl -H "Authorization: Bot [...]" -H "user-agent: Mozilla" "https://discord.com/api/guilds/[...]/members/[...]"

我得到相同的1020错误代码

解决方法

您需要按照此格式设置用户代理 https://discord.com/developers/docs/reference#user-agent

User-Agent: DiscordBot ($url,$versionNumber)