我正在按照亚马逊的指南创建可以访问 Alexa 的 python 应用程序。我已经获得了访问/刷新令牌,并试图打开与 AVS 的 HTTP2 连接。
由于我在 python 中执行此操作,因此我使用requests库来管理我所有的 HTTP 连接内容。但是,我似乎无法通过打开与 AVS 的连接的第一步。我认为问题只是我的请求中的语法,因为我不确定 get 请求的某些元素应该如何在 HTTP 调用中表示。具体来说,
要建立下行通道流,您的客户端必须在打开与 AVS 的连接后 10 秒内向 /{{API version}}/directives 发出 GET 请求。请求应如下所示:
1 :method = GET
2 :scheme = https
3 :path = /{{API version}}/directives
4 authorization = Bearer {{YOUR_ACCESS_TOKEN}}
首先,说明中说明的部分
...在打开与 AVS 的连接后 10 秒内
这会是从 GET 请求单独调用/API version/directives
吗?如果是这样,那会是什么样子?
然后,对于 的实际调用/API version/directives
,我的代码如下所示(Python):
def establishDownstream():
url = "https://avs-alexa-na.amazon.com/v20160207/directives"
foo = "Bearer " + ACCESS_KEY
payload = {"authorization" : foo}
g = requests.get(url, params=payload)
我的理由是,因为它是一个requests.get()
调用,所以:method = GET
处理了,因为 url 以 开头https://
,:scheme = https
处理了,并且 url 本身处理了路径(再次,如果我错了,请纠正我)。然后我只需要将我的访问密钥作为值传递给authorization
,我通过params
. 但是,这不会导致任何成功(具体的错误消息是requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:590)
)。
我真的不知道这里发生了什么。我在网上找到的所有关于 HTTP 请求协议的指南都以块的形式构造它们的请求,而不是通过 python 库,所以我没有示例可以处理。
任何帮助表示赞赏!