使用 python 请求将文件上传到 Discord API thought PUT

问题描述 投票:0回答:1

我在尝试将文件上传到 discord 时遇到问题。 如果我做对了,接下来是将文件上传到 discord 的算法: 我正在发送有关我要上传的文件的信息,discord 向我发送我必须放置文件的链接,我将文件放到给定的地址。

我有这个代码:

def Upload(link, channel, token):
  api_url = 'https://discord.com/api/v9/channels/'+channel+'/attachments'
  file_name = link[-10:]
  file_id = 1
  response = requests.get(link)
  open(file_name, "wb").write(response.content)
  file_size = os.path.getsize(file_name)
  upload = {"files":[{"filename":file_name,"file_size":file_size,"id":file_id}]}
  file = open(file_name, 'rb')
  header = {'authorization' : token}
  response = requests.post(api_url, headers=header, json=upload)
  put_url = response.json()['attachments'][0]['upload_url']
  put_headers = {'Content-Length': str(file_size), 'Connection': 'keep-alive', 'Content-Type': 'image/png', 'authorization' : token}
  response = requests.put(put_url, headers=put_headers, data=file)
  return response

第一眼看上去一切正常。响应代码为 200,一切正常。 但是如果我尝试获取标题 - print(response.headers),我会收到下一条消息:

{'X-GUploader-UploadID': 'bla-bla-bla', 'ETag': '"bla-bla"', 'x-goog-generation': '1682338706931190', 'x-goog-metageneration': '1', 'x-goog-hash': 'bla-bla-bla', 'x-goog-stored-content-length': '1112324', 'x-goog-stored-content-encoding': '身份', 'Vary': 'Origin', 'Content-Length': '0', 'Date': 'Mon, 24 Apr 2023 12:18:26 GMT', 'Server': 'UploadServer', 'Content-Type ':'文本/html;字符集=UTF-8'}

我有:'Content-Length' = '0', 'Content-Type' = 'text/html;字符集=UTF-8'。改变“put_headers”绝对不会影响它。我发送了 1112324 字节,wtf?我看到“x-goog-stored-content-length”=“1112324”,但我不知道出了什么问题。 此外,如果我尝试在下一封邮件中使用“已上传”附件 - 我会收到错误消息(错误的附件)。 我做错了什么?

我尝试使用 POST,但 discord 不接受这种附件方式

python api python-requests discord put
1个回答
1
投票

响应符合预期——响应的内容长度为零(因为没有什么可说的——“200 OK”告诉你它很好,标头中的元数据就足够了)。

我想你会在那个

response.json()['attachments']
列表中找到附件的实际阅读URL。

© www.soinside.com 2019 - 2024. All rights reserved.