如何将curl命令转换为python等价?

时间:2017-02-03 06:51:42

标签: python python-requests telegram-bot

我正在尝试实现一个python脚本,它将使用电报bot api的setWebhook方法设置webhook。正如在创建自签名证书后解释here我们可以使用此curl命令实现此目的:

curl -F "url=https://<YOURDOMAIN.EXAMPLE>/<WEBHOOKLOCATION>" \
-F "certificate=@<YOURCERTIFICATE>.pem" https://api.telegram.org/bot<YOURTOKEN>/setWebhook

调用此curl命令设置webhook 没有任何问题,我通过它获得更新。

但是现在我正在尝试使用python脚本实现这一点,所以我可以用一些命令行参数调用它,所以它为我设置webhook,获取有关它的信息或删除它。到目前为止我写的是:

files = {
        'file': ('certificate', open(configuration.CERTFILE, 'rb'))
    }

headers = {'Content-Type': 'multipart/form-data'}

data = {
        'url': configuration.WEBHOOK_URL,
    }

url = configuration.API % 'setWebhook'
rp = requests.post(url, headers=headers, data=data, files=files)

print('result of setWebhook: ', rp.status_code)

响应的状态代码 400 Bad Request。我认为我以错误的方式发送请求。

关于有什么问题的任何想法,我的requests请求发送bot api?

2 个答案:

答案 0 :(得分:1)

带有两个文件参数-F的精确卷曲查询可以转换为python-requests

import requests

files = {
    'url': 'https://<YOURDOMAIN.EXAMPLE>/<WEBHOOKLOCATION>',
    'certificate': open('<YOURCERTIFICATE>.pem', 'rb')
}

requests.get('https://api.telegram.org/bot<YOURTOKEN>/setWebhook', files=files)

答案 1 :(得分:0)

删除headers参数并重命名files参数的密钥就可以了。所以,现在我的代码看起来像这样:

files = {
    'certificate': ('certificate', open(configuration.CERTFILE, 'rb'))
}

data = {
    'url': configuration.WEBHOOK_URL,
}

url = configuration.API % 'setWebhook'
rp = requests.post(url, data=data, files=files)

它按预期工作。谢谢同性恋!