【问题标题】:discord.py: Fetch an Asset object via a cdn.discordapp URLdiscord.py:通过 cdn.discordapp URL 获取 Asset 对象
【发布时间】:2021-10-04 16:27:29
【问题描述】:

Tl;dr 有没有办法从 https://cdn.discordapp URL 获取资产对象,例如 'https://cdn.discordapp.com/avatars/235088799074484224/9b29bfc497a70b6cc85bb2087936f8fd.webp?size=1024 '?

...我问,因为我已经构建了一个命令,它将在调用它的频道中发送给定成员的 discord.Member.avatar_url 作为消息。该消息的内容只是 cdn URL,如以上。

我还有一个命令将在引用的消息中处理图像。作为其中的一部分,我想将图像作为字节对象获取 - 这在处理附件时很简单,甚至在使用其他 URL 上的图像时也很简单,但是每当我使用 urllib.request.urlretrieve 时,我都会收到 HTTP 403 禁止错误在不和谐的 cdn URL 上。这是一个示例 sn-p:

url = "https://cdn.discordapp.com/avatars/235088799074484224/9b29bfc497a70b6cc85bb2087936f8fd.webp?size=1024"
filename = url.split("/")[-1]
urllib.request.urlretrieve(url, filename)

哪个加注

discord.ext.commands.errors.CommandInvokeError: Command raised an exception: HTTPError: HTTP Error 403: Forbidden

所以我正在寻找另一种从不和谐 cdn url 中检索图像的方法。 discord.Asset 似乎是尝试完成此任务的最明智的类,但我看不到如何仅从不和谐的 cdn url 开始实例化它的对象。有没有办法做到这一点?或者有没有更好的方法来获取 cdn.discordapp 图像(从 url)作为字节?

编辑:我意识到您也可以通过检查给定消息的 discord.Embed.thumbnail.proxy_url 来获取代理 URL,但是在尝试从那里下载时我也收到 403 禁止。

【问题讨论】:

    标签: python discord.py


    【解决方案1】:

    我遇到了同样的问题,您可以通过提供 User-Agent 标头来伪造浏览器访问:

        urllib.request.build_opener()
        opener.addheaders = [('User-agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36')]
        urllib.request.install_opener(opener)
        urllib.request.urlretrieve(url, "test.jpg")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-30
      • 2011-07-14
      • 1970-01-01
      • 2022-01-07
      • 2019-08-06
      • 2016-08-10
      • 2018-09-24
      • 2017-06-30
      相关资源
      最近更新 更多