Python 与OAuth不一致的API 401
快速提问:我正在尝试使用Discord API对服务器(或公会,如果使用官方术语)上的所有消息进行备份 所以我实现了OAuth,没有任何问题,我有我的访问令牌,我可以查询一些端点(我尝试了Python 与OAuth不一致的API 401,python,api,oauth,discord,Python,Api,Oauth,Discord,快速提问:我正在尝试使用Discord API对服务器(或公会,如果使用官方术语)上的所有消息进行备份 所以我实现了OAuth,没有任何问题,我有我的访问令牌,我可以查询一些端点(我尝试了/users/@me,/users/@me/guilds)。不过,大多数都不起作用。例如,如果我查询/users/@me/channels(应该是DMs),我会从API获得401个未经授权的响应。如果我从/users/@me/guilds收集一个帮会id,然后尝试使用/guilds/guild.id/chann
/users/@me
,/users/@me/guilds
)。不过,大多数都不起作用。例如,如果我查询/users/@me/channels
(应该是DMs),我会从API获得401个未经授权的响应。如果我从/users/@me/guilds
收集一个帮会id,然后尝试使用/guilds/guild.id/channels
列出其中的频道,也是一样的
真正奇怪的是,我确实拥有所有需要的作用域(我想是的,我没有使用RPC,因为我不认为这是我想要做的事情所必需的),而我自己也无法理解。。。同样奇怪的是,在OAuth授权屏幕上,我有两件事:
它有点反唇相讥……:(
你有什么想法想和大家分享吗
谢谢
注意:我使用的是Python,但我不认为它与此相关,因为有些端点确实使用我拥有的头和令牌
这是我的“身份验证码”:
以及与API请求相关的代码:
def getHeaders():
return {
"Authorization" : "{} {}".format("Bearer", config["accessToken"]),
# "user-agent" : "DiscordBackup/0.0.1"
}
def getRequest(endpoint, asJson = True, additional = None):
url = "{}/{}".format(baseUrl, endpoint)
req = requests.get(url, headers = getHeaders())
print()
print(getHeaders())
print(url)
print(req.text)
if asJson:
return json.loads(req.text)
else:
return req.text
def getMe(): # this works
endpoint = "users/@me"
return getRequest(endpoint)
def getMyDMs(): # this gives me a code 401 Unauthorized
endpoint = "/users/@me/channels"
return getRequest(endpoint)
我在遇到这个问题时看到了这篇文章,坦率地说,没有办法解决它
messages.read
权限用于本地RPC服务器
但是,本地RPC服务器是私有测试版,您必须注册/获得接受才能使用它
我想创建一个DM exporter,但现在看来不太可能了。你们的机器人到底有哪一个?最好能看到一些代码,这样我们就可以知道你们是否在其他地方犯了错误。我添加了它们,还有两个请求函数,一个有效,另一个给我一个代码401。@ThomasKowalski你们有进一步的了解吗s?我有一个类似的问题:OAuth正在工作,我可以阅读
/users/@me/guilds
,但我不能阅读/users/@me/channels
。不,我没有,我放弃了。如果你找到解决方案,请告诉我!哇,这正是我想知道的!尽管答案来得很晚,但我很高兴知道不是我的代码错了啊,我想这可能值得一提的是任何其他人偶然发现这一点,但我很高兴你仍然积极,并设法阅读:)我现在最好的办法是使用持票人代币,这显然让你访问DMs,但许多人可能不想这样做。
def getHeaders():
return {
"Authorization" : "{} {}".format("Bearer", config["accessToken"]),
# "user-agent" : "DiscordBackup/0.0.1"
}
def getRequest(endpoint, asJson = True, additional = None):
url = "{}/{}".format(baseUrl, endpoint)
req = requests.get(url, headers = getHeaders())
print()
print(getHeaders())
print(url)
print(req.text)
if asJson:
return json.loads(req.text)
else:
return req.text
def getMe(): # this works
endpoint = "users/@me"
return getRequest(endpoint)
def getMyDMs(): # this gives me a code 401 Unauthorized
endpoint = "/users/@me/channels"
return getRequest(endpoint)