建立HTTP2连接的AVS V2

2024-10-06 12:36:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Amazon's instructions假设GET一个下行信道流,然后在同一个连接上,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)

但是,我始终收到以下错误消息:

^{pr2}$

即使我去掉post请求中的data=json.dumps(spayload)行并将其替换为json = spayload,这种情况仍然存在。在

我有两个主要问题:

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

2)如何解决“在有效载荷中找不到多部分实体”消息?我准确地发送了他们的example SynchronizeState event,它明确地说包括一个空的有效载荷。在

提前感谢您的帮助!任何事都值得感激!在


Tags: httpscomjsonhttpamazondatasessionrequests
1条回答
网友
1楼 · 发布于 2024-10-06 12:36:32

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

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

相关问题 更多 >