Я отправляю строку большого двоичного объекта в остальные заголовки API в качестве токена.

enter image description here

К которому я хочу получить доступ и скрыть его в btyes

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

Необработанный большой двоичный объект строки

\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'
0
rahul.m 4 Фев 2022 в 11:37
В чем разница между «Ожидаемый блоб в байте» и «Текущий вывод»?
 – 
Corralien
4 Фев 2022 в 11:43
Обновлено. пожалуйста, проверьте
 – 
rahul.m
4 Фев 2022 в 11:45
1
Необработанный большой двоичный объект строки является результатом print(bob). Каков результат print(repr(bob))?
 – 
Corralien
4 Фев 2022 в 11:59

2 ответа

Лучший ответ

Вы не отправляете строку большого двоичного объекта, вы отправляете просто строку, начинающуюся с \x01. Он буквально содержит символы \, x, 0, 1 и ни одного символа '\x01'. Сравнивать:

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

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

Вместо отправки большого двоичного объекта в этом формате вы можете сначала закодировать его с помощью 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
1
awesoon 4 Фев 2022 в 12:04

Возможно, вам нужно указать кодировку:

bob_encoded = bob.encode('utf-8')
1
Corralien 4 Фев 2022 в 11:50
Все тот же.
 – 
rahul.m
4 Фев 2022 в 11:54