我正在尝试实现一个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?
答案 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)
它按预期工作。谢谢同性恋!