Строковое кодирование Python не работает для заголовков rest api
Я отправляю строку blob в заголовках rest API в качестве токена.
К которому я хочу получить доступ и преобразовать его в 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*
Ожидаемый блоб в байте
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'*
Токовый выход
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'*
Возможно, необходимо указать кодировку:
bob_encoded = bob.encode('utf-8')
Вы отправляете не блоб-строку, а просто строку, которая начинается с \x01. Она буквально содержит символы \, x, 0, 1 и ни одного символа '\x01'. Сравните:
In [6]: "\x01".encode()
Out[6]: b'\x01'
In [7]: r"\x01".encode()
Out[7]: b'\\x01'
Вместо отправки blob в этом формате вы можете сначала закодировать его с помощью base64 (или любой другой ascii кодировки):
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
