AVS V2 Установка соединения HTTP2

Я пытаюсь создать соединение HTTP/2 с помощью Python, Requests и Hyper HTTP20Adapter (для поддержки HTTP/2) с AVS (версия 20160207 API). Я задал аналогичный вопрос здесь и определил, что мой основной проблема исходила от запросов, не поддерживающих HTTP/2 - я думаю, что исправил это с помощью модуля Hyper.

инструкции Amazon скажите 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) Как устранить сообщение «В полезной нагрузке не найдено составное тело»? Я точно отправил их пример события SynchronizeState, и он специально сказал включать пустую полезную нагрузку.

Заранее спасибо за помощь! Все ценится!


person David Cai    schedule 24.06.2016    source источник


Ответы (1)


1) извините, я не знаю - у меня были проблемы с использованием адаптера - мои запросы не завершались, поэтому я переключился на использование потока на основе протокола asyncio, показанного в файле пример гиперсервера (не так уж плохо преобразовать его в сценарий использования клиента)

2) Я решил это, убедившись, что я завершил поток при отправке заголовков в начальном GET и после отправки данных в POST. (self._conn.send_data(stream_id, sync_post_data, end_stream=True)

person toejough    schedule 28.07.2016