You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Slack应用Manifest更新:curl转Python请求的实现疑问

解决Slack Manifest更新的Python requests实现问题

问题背景

用户有一个可正常运行的curl命令,用于更新Slack应用的Manifest:

curl -D /dev/stderr -s -d app_id=<APP_ID> --data-urlencode manifest@manifest.json -H 'authorization: Bearer <CURRENT_TOKEN>' https://slack.com/api/apps.manifest.update

尝试用Python3的requests库实现相同功能时,写出了以下代码:

import requests

currentKey = <CURRENT_KEY>

headers = {
        'authorization': 'Bearer ' + currentKey,
}

data = {
        'app_id': '<APP_ID>',
}

response = requests.post('https://slack.com/api/apps.manifest.update', headers=headers, data=data)
print(response.text)

但运行后返回错误:

{"ok":false,"error":"invalid_arguments","response_metadata":{"messages":["[ERROR] missing required field: manifest"]}}

用户尝试过用json、urllib读取编码后传入data字典的方式均未成功,想知道正确的编码传递方法,是否需要使用requests的files参数。

解决方案

不需要使用files参数,因为curl里的--data-urlencode manifest@manifest.json是把manifest.json的内容读取出来,做URL编码后作为表单字段manifest的值传递,并非文件上传操作。

正确的实现步骤:

  1. 读取manifest.json文件的全部内容
  2. 将内容添加到data字典的manifest字段中
  3. 直接用requests.post的data参数提交,requests会自动处理URL编码,和curl的行为一致

完整代码示例:

import requests

currentKey = "<CURRENT_TOKEN>"
app_id = "<APP_ID>"

headers = {
    'authorization': f'Bearer {currentKey}',
}

# 读取manifest文件内容
with open('manifest.json', 'r', encoding='utf-8') as f:
    manifest_content = f.read()

data = {
    'app_id': app_id,
    'manifest': manifest_content
}

response = requests.post('https://slack.com/api/apps.manifest.update', headers=headers, data=data)
print(response.text)

如果之前用urllib编码失败,可能是手动编码后重复编码导致的。直接把文件内容放到data字典里,让requests自动处理编码即可,这和curl的--data-urlencode行为完全匹配。

内容的提问来源于stack exchange,提问作者El_Birdo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:58:22