简体   繁体   中英

Python string encode not working for rest api headers

I am sending a blob string in the rest API headers as a token.

在此处输入图像描述

Which I want to access and covert it into btyes

bob = request.META.get('HTTP_BLOB_TOKEN')
bob_encoded = bob.encode()

String raw blob

\x01\x02\x02\x00xM\xc3\xa3\xc2\x98\xc2\xac\xc3\xb7\xc3\x87\xc2\xaf\x7f\xc2\x95q\xc3\x85R\xc3\x8ae\xc3\x80\xc2\xa9\xc3\x90\xc3\x85\xc2\xa9\x15\xc3\x82=\xc2\xa0N\xc2\x88\xc3\xaf#5x=\x01%\x0e\xc2\xa8aT\xc3\x8a\xc3\x81\xc3\x92"\xc2\xa0\x04N$GF\x00\x00\x00h0f\x06\t\xc2\x86H\xc2\x86\xc3\xb7\r\x01\x07\x06\xc2\xa0Y0W\x02\x01\x000R\x06\t*\xc2\x86H\xc2\x86\xc3\xb7\r\x01\x07\x010\x1e\x06\t`\xc2\x86H\x01e\x03\x04\x01.0\x11\x04\x0c\xc2\x9e\x12\xc3\x82\xc2\x8bi\xc2\xb7\xc3\x93+\x18\xc3\xbfs\xc2\x97\x02\x01\x10\xc2\x80%p\xc2\xb3\xc2\x9b\x03%X\xc3\x8a\xc2\xad\xc3\xb1Cbi=w\xc3\xa9\xc3\x9f\xc2\xb0\x18nK7\xc2\x9a\xc3\x90\xc3\x9e\xc3\xb3HB\xc3\xbd\xc3\x94\x07\xc3\xba\xc3\x83\x1c\xc3\x8f\xc3\x96\x0e2*

Expected blob in byte

b'\x01\x02\x02\x00xM\xc3\xa3\xc2\x98\xc2\xac\xc3\xb7\xc3\x87\xc2\xaf\x7f\xc2\x95q\xc3\x85R\xc3\x8ae\xc3\x80\xc2\xa9\xc3\x90\xc3\x85\xc2\xa9\x15\xc3\x82=\xc2\xa0N\xc2\x88\xc3\xaf#5x=\x01%\x0e\xc2\xa8aT\xc3\x8a\xc3\x81\xc3\x92"\xc2\xa0\x04N$GF\x00\x00\x00h0f\x06\t\xc2\x86H\xc2\x86\xc3\xb7\r\x01\x07\x06\xc2\xa0Y0W\x02\x01\x000R\x06\t*\xc2\x86H\xc2\x86\xc3\xb7\r\x01\x07\x010\x1e\x06\t`\xc2\x86H\x01e\x03\x04\x01.0\x11\x04\x0c\xc2\x9e\x12\xc3\x82\xc2\x8bi\xc2\xb7\xc3\x93+\x18\xc3\xbfs\xc2\x97\x02\x01\x10\xc2\x80%p\xc2\xb3\xc2\x9b\x03%X\xc3\x8a\xc2\xad\xc3\xb1Cbi=w\xc3\xa9\xc3\x9f\xc2\xb0\x18nK7\xc2\x9a\xc3\x90\xc3\x9e\xc3\xb3HB\xc3\xbd\xc3\x94\x07\xc3\xba\xc3\x83\x1c\xc3\x8f\xc3\x96\x0e2'

Current output

b'\\\x01\\\x02\\\x02\\\x00xM\\\xc3\\\xa3\\\xc2\\\x98\\\xc2\\\xac\\\xc3\\\xb7\\\xc3\\\x87\\\xc2\\\xaf\\\x7f\\\xc2\\\x95q\\xc3\\x85R\\xc3\\x8ae\\xc3\\x80\\\xc2\\xa9\\xc3\\x90\\xc3\\x85\\\xc2\\xa9\\x15\\xc3\\x82=\\xc2\\xa0N\\\xc2\\x88\\xc3\\xaf#5x=\\x01%\\\x0e\\xc2\\xa8aT\\xc3\\x8a\\xc3\\x81\\\xc3\\x92"\\xc2\\xa0\\x04N$GF\\\x00\\x00\\x00h0f\\x06\\t\\xc2\\x86H\\\xc2\\x86\\xc3\\xb7\\r\\x01\\x07\\\x06\\xc2\\xa0Y0W\\x02\\x01\\x000R\\\x06\\t*\\xc2\\x86H\\xc2\\x86\\xc3\\\xb7\\r\\x01\\x07\\x010\\x1e\\x06\\t`\\xc2\\x86H\\x01e\\x03\\x04\\x01.0\\x11\\x04\\x0c\\xc2\\x9e\\x12\\\xc3\\x82\\xc2\\x8bi\\xc2\\xb7\\\xc3\\\x93+\\\x18\\\xc3\\\xbfs\\\xc2\\\x97\\\x02\\\x01\\\x10\\\xc2\\\x80%p\\\xc2\\\xb3\\\xc2\\\x9b\\\x03%X\\\xc3\\\x8a\\\xc2\\\xad\\\xc3\\\xb1Cbi=w\\\xc3\\\xa9\\\xc3\\\x9f\\\xc2\\\xb0\\\x18nK7\\\xc2\\\x9a\\\xc3\\\x90\\\xc3\\\x9e\\\xc3\\\xb3HB\\\xc3\\\xbd\\\xc3\\\x94\\\x07\\\xc3\\\xba\\\xc3\\\x83\\\x1c\\\xc3\\\x8f\\\xc3\\\x96\\\x0e2'

You're not sending a blob string, you're sending just a string which starts with \x01 . It literally contains chars \ , x , 0 , 1 , and not a single '\x01' symbol. Compare:

In [6]: "\x01".encode()
Out[6]: b'\x01'

In [7]: r"\x01".encode()
Out[7]: b'\\x01'

Instead of sending blob in this format you can encode it firstly with base64 (or any other ascii encoding):

In [16]: s = '\x01\x02\x02\x00xM\xc3\xa3\xc2\x98\xc2\xac\xc3\xb7\xc3\x87\xc2\xaf\x7f\xc2\x95q\xc3\x85R\xc3\x8ae\xc3\x80\xc2\xa9\xc3\x90\xc3\x85\xc2\xa9\x15\xc3
    ...: \x82=\xc2\xa0N\xc2\x88\xc3\xaf#5x=\x01%\x0e\xc2\xa8aT\xc3\x8a\xc3\x81\xc3\x92"\xc2\xa0\x04N$GF\x00\x00\x00h0f\x06\t\xc2\x86H\xc2\x86\xc3\xb7\r\x01\x07
    ...: \x06\xc2\xa0Y0W\x02\x01\x000R\x06\t\xc2\x86H\xc2\x86\xc3\xb7\r\x01\x07\x010\x1e\x06\t`\xc2\x86H\x01e\x03\x04\x01.0\x11\x04\x0c\xc2\x9e\x12\xc3\x82\xc2
    ...: \x8bi\xc2\xb7\xc3\x93+\x18\xc3\xbfs\xc2\x97\x02\x01\x10\xc2\x80%p\xc2\xb3\xc2\x9b\x03%X\xc3\x8a\xc2\xad\xc3\xb1Cbi=w\xc3\xa9\xc3\x9f\xc2\xb0\x18nK7\xc
    ...: 2\x9a\xc3\x90\xc3\x9e\xc3\xb3HB\xc3\xbd\xc3\x94\x07\xc3\xba\xc3\x83\x1c\xc3\x8f\xc3\x96\x0e2*'

In [17]: payload = base64.b64encode(s.encode()).decode()

In [18]: payload
Out[18]: 'AQICAHhNw4PCo8OCwpjDgsKsw4PCt8ODwofDgsKvf8OCwpVxw4PChVLDg8KKZcODwoDDgsKpw4PCkMODwoXDgsKpFcODwoI9w4LCoE7DgsKIw4PCryM1eD0BJQ7DgsKoYVTDg8KKw4PCgcODwpIiw4LCoAROJEdGAAAAaDBmBgnDgsKGSMOCwobDg8K3DQEHBsOCwqBZMFcCAQAwUgYJw4LChkjDgsKGw4PCtw0BBwEwHgYJYMOCwoZIAWUDBAEuMBEEDMOCwp4Sw4PCgsOCwotpw4LCt8ODwpMrGMODwr9zw4LClwIBEMOCwoAlcMOCwrPDgsKbAyVYw4PCisOCwq3Dg8KxQ2JpPXfDg8Kpw4PCn8OCwrAYbks3w4LCmsODwpDDg8Kew4PCs0hCw4PCvcODwpQHw4PCusODwoMcw4PCj8ODwpYOMio='

In [19]: base64.b64decode(payload.encode()).decode()
Out[19]: '\x01\x02\x02\x00xMãÂ\x98¬÷Ã\x87¯\x7fÂ\x95qÃ\x85RÃ\x8aeÃ\x80©Ã\x90Ã\x85©\x15Ã\x82=Â\xa0NÂ\x88ï#5x=\x01%\x0e¨aTÃ\x8aÃ\x81Ã\x92"Â\xa0\x04N$GF\x00\x00\x00h0f\x06\tÂ\x86HÂ\x86÷\r\x01\x07\x06Â\xa0Y0W\x02\x01\x000R\x06\tÂ\x86HÂ\x86÷\r\x01\x07\x010\x1e\x06\t`Â\x86H\x01e\x03\x04\x01.0\x11\x04\x0cÂ\x9e\x12Ã\x82Â\x8bi·Ã\x93+\x18ÿsÂ\x97\x02\x01\x10Â\x80%p³Â\x9b\x03%XÃ\x8aÂ\xadñCbi=wéÃ\x9f°\x18nK7Â\x9aÃ\x90Ã\x9eóHBýÃ\x94\x07úÃ\x83\x1cÃ\x8fÃ\x96\x0e2*'

In [20]: base64.b64decode(payload.encode()).decode() == s
Out[20]: True

Maybe, you have to specify an encoding:

bob_encoded = bob.encode('utf-8')

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM