2016-06-24 7 views
1

Python、Requests、およびHTTP/2サポートのHyper HTTP20AdapterをAVS(APIのバージョン20160207)に使用してHTTP/2接続を作成しようとしています。私は同様の質問hereを尋ね、私の主な問題はHTTP/2をサポートしていないリクエストから来ていると判断 - 私はHyperモジュールを使って解決したと思います。AVS V2 HTTP2接続の確立

Amazon's instructionsGETダウンチャネルストリーム、次に同じ接続でPOSTSynchronizeStateイベントです。

これは、2つの要求を送信する時、私の試みです:しかし、私は一貫してこのエラーメッセージになっています

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)私は指示通り、私は「同じ接続」の両方の要求を作っていることはよく分からない:

は、私は、主に2つの質問があります。私は(私は requests.Session()がそれを世話したと思ったが...)?もしそうでなければ、どうすればいいのですか?

2)「ペイロードで検出されたマルチパートボディが見つかりません」というメッセージはどうすれば解決できますか?私は彼らのexample SynchronizeState eventを正確に送った、そしてそれは特に空のペイロードを含むと言った。

ありがとうございました!何でも感謝しています!

答えて

0

1)申し訳ありませんが、私はアダプターの使用に問題がありました。私の要求は終了していないので、hyper server exampleに示されているasyncioプロトコルベースのフローを使用するように切り替えました

2)私は、最初のGETでヘッダーを送信したときと、POSTでデータを送信した後にストリームを終了したことを確認することでこれを解決しました。 (self._conn.send_data(stream_id, sync_post_data, end_stream=True)

関連する問題