2016-06-24 2 views
1

파이썬, 요청 및 AVS (API의 버전 20160207)에 대한 HTTP/2 지원을위한 하이퍼 HTTP20Adapter를 사용하여 HTTP/2 연결을 만들려고합니다. 나는 비슷한 질문을 here라고 물었고, 나의 주된 문제가 HTTP/2를 지원하지 않는 요청에서 왔다고 판단했다. - 나는 하이퍼 모듈을 사용하여 그것을 고쳤다 고 생각한다.AVS V2 HTTP2 연결 설정

Amazon's instructions은 다운 스트림 스트림을 말하며, 동일한 연결에서 이벤트를 말합니다.

이 두 요청을 보내는에서 내 시도 :

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

이 내가있는 data=json.dumps(spayload) 라인을 꺼내 경우에도 지속 : 나는 일관되게이 오류 메시지를 받고 있어요 그러나

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) 

post을 요청하고 json = spayload으로 바꿉니다.

1) 내가 지시에 따라 나는 "동일한 연결"에 모두 요청을 만들고있어 모르겠어요 :

나는 두 가지 질문이 있습니다. 나는 (나는 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)

관련 문제