DIDL format data parsing

I get DIDL data when I request a container locally using the http method. How do I parse it?

{'status': 'replied',
 'reply': {'arg': b'DIDL\x07k\x02\xbc\x8a\x01\x01\xdc\x93\xf6\x8d\x02\x7fl\x04\xae\x9d\xb1\x90\x01h\xfb\xdb\x8c\xd2\tq\x95\xe9\xae\x99\n\x02\x85\xf2\x80\x81\x0e\x04m\x03l\x03\xae\x9d\xb1\x90\x01h\xcb\xe4\xfd\xc7\x04q\xfb\xdb\x8c\xd2\tqm\x05l\x03\xcb\xe4\xfd\xc7\x04q\xae\xff\xbd\x8b\x06\x06\xfb\xdb\x8c\xd2\tqm{\x01\x00\x01'}}
import json
import cbor2
import requests

req_data = {"content":{"request_type":"query","canister_id":[],"method_name":"get_account","arg":[],"sender":[],"ingress_expiry":1111,"nonce":[]},"sender_pubkey":[],"sender_sig":[]}


url = "https://ic0.app/api/v2/canister/xxxxxx/query"
headers = {'Content-Type': 'application/cbor'}


print("req_data: ", req_data)
cbor_data = cbor2.dumps(req_data)
print("cbor_data: ", cbor_data)
response = requests.post(url, data=cbor_data, headers=headers)
print("response status:", response.status_code)
if response.headers['Content-Type'] == 'application/cbor':
    print("response.content", response.content)
    decoded_response = cbor2.loads(response.content)
    print(decoded_response)
else:
    print(response.text)

There’s ic-py that you could use so you don’t have to do everything manually. Is that an option?

1 Like