2017-10-22 17 views
0

私はslack apiの周りのラッパーであるpythonライブラリslackclientを通してslack api呼び出しを行っていました。しかし、いくつかのケースで私はURLとget/postメソッドでも従来のAPI呼び出しを行う必要があります。私は自分のボットが別のユーザーと直接メッセージチャンネルを開こうとしていました。ドキュメント - https://api.slack.com/methods/im.openは、 "アプリケーション/ x-www-form-urlencodedクエリーストリングまたはPOST本体の一部としてこれらのパラメータを表示します。application/jsonは現在受け入れられていません。slack apiがPythonリクエストライブラリを呼び出す

さて、Pythonで、私は書くことができ、

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 

私が得るメッセージは、私は私のボットトークンと別のユーザーIDを使用していますが、私はメッセージが「authedない」ことを知っている{"ok":false,"error":"not_authed"}

である私私が間違ったフォーマットでリクエストを送信しているのは、ドキュメントを読んでいるだけなので、ちょっと愚痴です。私はこれらの要求を正確に送信する方法がわかりません。

助けが必要ですか?

+1

試み 'data'として' [( 'トークン'、BOT_TOKEN)、( 'ユーザ'、USER_ID)、.....] 'し、次いで'応答= requests.post(URL、データ、 **ヘッダー) ' –

+0

それは働いた。ありがとう@ArpitGoyal –

+0

あなたはそれをupvoteできるように私は答えを投稿する必要がありますか? –

答えて

1

コンテンツタイプヘッダがx-www-form-urlencodedであるため、辞書形式のデータ送信が機能しません。このようなことを試すことができます。設定

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

requests.postの2番目のパラメータはdataに使用されていますので、実際にはheadersという辞書を投稿しています。 headersを使用する場合は、名前で引数を渡すことができます。

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

フォームデータをポストするとき'x-www-form-urlencoded'がデフォルトであるため、しかし、これは、この場合には必要ありません。

関連する問題