Jake
Jake

Reputation: 13141

Python decode AMF response

I'm making a request in python to a web service which returns AMF. I don't know if it's AMF0 or AMF3 yet.

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

(Full data here)

How can I take r.text and convert it to a python object or similar? I found amfast but it's Decoder class returns a 3.131513074181806e-294 assuming AMF0 and None for AMF3. (Both incorrect)

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

Upvotes: 2

Views: 4410

Answers (2)

iulica
iulica

Reputation: 56

I see two problems with your code, the first is using r.text to return binary data. Use r.content instead. The second problem is using decoder.decode method, which decodes one object and not a packet. Use decoder.decode_packet instead.

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

Using Pyamf works as well, using r.content.

Upvotes: 4

jassinm
jassinm

Reputation: 7491

have u tried PyAMF.

from pyamf import remoting
remoting.decode(data)

Upvotes: 4

Related Questions