AVS V2建立HTTP2连接

时间:2016-06-24 17:51:57

标签: python python-requests http2 alexa-voice-service

我尝试使用Python,请求和Hyper HTTP20Adapter(用于HTTP / 2支持)创建HTTP / 2连接到AVS(API的版本20160207)。我问了一个类似的问题here,并确定我的主要问题来自不支持HTTP / 2的请求 - 我相信我已经通过使用Hyper模块解决了这个问题。

Amazon's instructionsGET向下信道流说,然后在同一个连接上POST SynchronizeState事件。

这是我尝试发送两个请求:

downstream = requests.Session()
downstream.mount('https://avs-alexa-na.amazon.com', HTTP20Adapter())
qheader = {"authorization": "Bearer " + ACCESS_KEY}
sheader = {"authorization": "Bearer " + ACCESS_KEY, "Content-Disposition": "form-data; name=metadata","Content-Type": "application/json; charset=UTF-8"}
spayload = {"context": [],"event": {"header":{"namespace":"System","name":"SynchronizeState","messageId":"SyncState",},"payload": {}}}

q = downstream.get("https://avs-alexa-na.amazon.com/v20160207/directives", headers=qheader, stream=True)

s = downstream.post("https://avs-alexa-na.amazon.com/v20160207/events", headers=sheader, data=json.dumps(spayload)

但是,我一直收到此错误消息:

INVALID_REQUEST_EXCEPTION, description: No multipart body found in the payload.

即使我在data=json.dumps(spayload)请求中取出post行并将其替换为json = spayload,这仍然存在。

我有两个主要问题:

1)我不确定我是否在同一个连接上发出了两个请求"按照指示。我(我以为requests.Session()照顾了那个,但是......)?如果没有,我该怎么做?

2)如何解决"在有效载荷中找不到多部分主体"信息?我确切地发送了他们的example SynchronizeState event,并且特别说包括空的有效载荷。

提前感谢您的帮助!一切都很赞赏!

1 个答案:

答案 0 :(得分:0)

1)抱歉,我不知道 - 我在使用适配器时遇到问题 - 我的请求没有终止,所以我转而使用hyper server example中显示的基于asyncio协议的流程(它&# 39;将其转换为客户端用例并不太糟糕)

2)我通过确保在初始GET中发送标头并在POST中发送数据后结束流来解决这个问题。 (self._conn.send_data(stream_id, sync_post_data, end_stream=True)