2017-02-03 78 views
0

我想實現一個python腳本,它將設置一個webhook與電報bot api的setWebhook方法。由於它是建立一個自簽名證書後說:here我們可以用這個curl命令做到這一點:如何將curl命令轉換爲python等價物?

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

調用這個curl命令設置網絡掛接沒有任何問題,我通過它獲取更新。

但現在我想用python腳本來實現這個,所以我可以只使用一些命令行參數來調用它,所以它爲我樹立網絡掛接,獲得關於它的信息或刪除它。我寫的,到目前爲止是這樣的:

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

刪除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) 

它按照預期工作。謝謝同志!

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) 
+0

'curl -h'表示'-F' *指定HTTP多部分POST數據*和'url'不是文件。無論如何,我已經嘗試了你提供的代碼,但沒有取得任何成功。 – sehrob