2017-10-22 1 views
0

Ich machte Slack-API-Aufrufe durch Python-Bibliothek slackclient, die ein Wrapper um Slack-API ist. In einigen Fällen muss ich jedoch konventionelle API-Aufrufe auch mit URL und Get/Post-Methode machen. Ich habe versucht, einen direkten Nachrichtenkanal mit einem anderen Benutzer durch meinen Bot zu öffnen. Die Dokumentation - https://api.slack.com/methods/im.open sagt zu "diese Parameter als Teil einer Anwendung/x-www-Form-urlencoded Querystring oder POST Körper präsentieren. Anwendung/Json wird derzeit nicht akzeptiert."Slack-API-Aufrufe durch Python-Anfrage-Bibliothek

nun in Python, kann ich schreiben

url = 'https://slack.com/api/im.open' 
    headers = {'content-type':'x-www-form-urlencoded'} 
    data = {'token':BOT_TOKEN, 'user':user_id, 'include_locale':'true','return_im':'true'} 
    r= requests.post(url,headers,data) 
    print r.text 

Die Botschaft, die ich erhalten, ist {"ok":false,"error":"not_authed"}

ich die Nachricht wissen "nicht authed" obwohl ich meine Bot-Token und ein anderer Benutzer-ID verwenden, meine Vorweg ist, dass ich die Anfrage in einem falschen Format sende, weil ich es einfach geschrieben habe und die Dokumentation gelesen habe. Ich bin mir nicht sicher, wie ich genau diese Anfragen senden soll.

Irgendwelche Hilfe?

+1

try Einstellung 'data' als' [('token', BOT_TOKEN), ('user', user_id), .....] 'und dann' response = requests.post (url, Daten, ** Header) ' –

+0

es hat funktioniert. Danke @ArpitGoyal –

+0

sollte ich eine Antwort posten, damit Sie es upvote? –

Antwort

1

seit dem Content-Type-Header ist x-www-form-urlencoded das Senden von Daten in Form von Wörterbuch funktionieren nicht. Sie können so etwas versuchen.

import requests 

url = 'https://slack.com/api/im.open' 
headers = {'content-type': 'x-www-form-urlencoded'} 
data = [ 
('token', BOT_TOKEN), 
('user', user_id), 
('include_locale', 'true'), 
('return_im', 'true') 
] 

r = requests.post(url, data, **headers) 
print r.text 
1

Der zweite Parameter in requests.post wird für data verwendet. Sie stellen also in Ihrer Anfrage das headers Wörterbuch bereit. Wenn Sie headers verwenden möchten, können Sie Argumente nach Namen übergeben.

r= requests.post(url, data, headers=headers) 

Dies ist jedoch in diesem Fall nicht erforderlich, da 'x-www-form-urlencoded' der Standard ist, wenn Formulardaten veröffentlichen.

Verwandte Themen