2012-12-08 3 views
2

파이썬에서 AMF를 리턴하는 웹 서비스에 요청하고있다. AMF0 또는 AMF3인지 아직 모르겠습니다.파이썬 디코딩 AMF 응답

r = requests.post(url, data=data) 
>>> r.text 
u'\x00\x03...' 

(Full data here)는 어떻게 r.text을 가지고 파이썬 객체 또는 유사한로 변환 할 수 있습니까? 나는 amfast을 발견하지만 Decoder 클래스는 AMF3에 대한 3.131513074181806e-294 가정 ActionScript 1.0 및 None를 반환합니다. (둘다 올바르지 않음)

from amfast.decoder import Decoder 
decoder = Decoder(amf3=False) 
obj = decoder.decode(StringIO.StringIO(r.text)) 
+0

amfast 디코딩 코드를 게시 할 수 있습니까? –

+0

디코딩 코드를 포함하도록 수정 된 질문입니다. – Jake

+0

Jake, 문서를 읽으면 Decoder.decode에 문자열이 필요한 것으로 나타납니다. StringIO 호출없이해볼 수 있습니까? –

답변

4

나는 첫 번째 이진 데이터를 반환하는 r.text을 사용하고, 코드와 함께 두 가지 문제를 참조하십시오. 대신 r.content을 사용하십시오. 두 번째 문제는 decoder.decode 메서드를 사용하는 것입니다.이 메서드는 패킷이 아닌 하나의 개체를 디코딩합니다. 대신 decoder.decode_packet을 사용하십시오.

from amfast.decoder import Decoder 
decoder = Decoder(amf3=True) 
obj = decoder.decode_packet(r.content) 

을 사용하면 Pyamf도 사용할 수 있습니다.

+1

예제가'r.content'를 사용하여 저에게 효과적입니다. 감사합니다. – Jake

4

당신은 PyAMF를 시도했습니다.

from pyamf import remoting 
remoting.decode(data) 
+0

불행히도'pyamf.DecodeError : 지원되지 않는 ActionScript 유형' – Jake

+0

이 나에게 도움이되었습니다.이 경우 remoting.decode (r.content). 지원되지 않는 ActionScript 유형은 아마도 올바른 바이트 (r.content)를 전달하지 않기 때문일 것입니다. –