通过Python中的HTTP请求与Microsoft Azure上托管的聊天机器人开始对话

时间:2018-01-04 13:28:43

标签: python azure http

Microsoft tutorial表明,为了与机器人建立对话,我应该发出以下HTTP请求:

POST https://directline.botframework.com/api/conversations
Authorization: Bearer SECRET_OR_TOKEN

我的问题是我是否可以使用以下Python代码实现此目的:

import requests
r = requests.post('https://directline.botframework.com/api/conversations', 
                params = {'Authorization':'Bearer ftmhNAqZ2tw.cwA.qIA.Xz2ZWfYJzxd8vJjcK9VmINWNLxlvKiM5jC8F_cbaf0s'})

如果我使用print(r.content)打印回复,则说明:

  

{“error”:{       “code”:“BadArgument”,       “message”:“遗失令牌或秘密”}}

2 个答案:

答案 0 :(得分:0)

承载令牌需要作为标头发送,而不是作为有效负载或查询参数发送。

您需要使用headers参数:

auth = {'Authorization': 'Bearer xxxYourBearerTokenHerexxx'}
r = requests.post('https://directline.botframework.com/api/conversations', headers=auth)

print(r) # <Response [200]>

答案 1 :(得分:0)

HTTP请求有三个可以发送内容的区域:

  • 网址参数

  • 接头

要在python的requests包中设置这些,可以使用以下内容(假定POST方法,但都是相同的):

网址参数

requests.post('https://myurl.com', params = {'MyParam':'MyValue'})
# equivilient to http://myurl.com?MyParam=MyValue

<强>车身

requests.post('https://myurl.com', data={"key":"value"})
# or if sending json data
requests.post('https://myurl.com', data=json.dumps(myData))

<强>接头

requests.post('https://myurl.com', headers={"headername":"value"})

在您的具体情况下,虽然API没有详细记录 - 我们可以假设他们希望在标题中发送“授权”数据,因为这是标准的。在这种情况下,您需要按如下方式分配标题:

requests.post('https://directline.botframework.com/api/conversations', headers={'Authorization':'Bearer ftmhNAqZ2tw.cwA.qIA.Xz2ZWfYJzxd8vJjcK9VmINWNLxlvKiM5jC8F_cbaf0s'})