我正在尝试使用 Python、Requests 和 Hyper HTTP20Adapter(用于 HTTP/2 支持)到 AVS(API 版本 20160207)创建 HTTP/2 连接。我在这里问了一个类似的问题,并确定我的主要问题来自不支持 HTTP/2 的请求——我相信我已经通过使用 Hyper 模块解决了这个问题。
亚马逊的指令说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)
但是,我一直收到此错误消息:
INVALID_REQUEST_EXCEPTION, description: No multipart body found in the payload.
即使我取出请求data=json.dumps(spayload)
中的行post
并将其替换为json = spayload
.
我有两个主要问题:
1)我不确定我是否按照指示在“同一连接”上提出两个请求。我是吗(我以为可以requests.Session()
解决这个问题,但是……)?如果没有,我该怎么做?
2) 如何解决“No multipart body found in payload”消息?我准确地发送了他们的示例 SynchronizeState 事件,并且它明确表示包含一个空的有效负载。
在此先感谢您的帮助!任何事情都值得赞赏!