кодировка base64 выводит неверный конечный байт - PullRequest
0 голосов
/ 20 июня 2020

Одно мобильное приложение, которое я пытаюсь очистить, принимает запросы в кодировке b64. Я пробовал следующее:

post_data = {
"id": iv, 
"command": "queryDoc",
 "params": {
     "pageNum": "1", 
     "sortFields": "s50:desc", 
     "ciphertext": make_ciphertext(), 
     "devid": "d607f6d3de0f4f68b44aae416592f559", 
     "devtype": "1", 
     "pageSize": "20", 
     "queryCondition": [{"key":"s21","value":"2020"}]
     }
}

post_data_encoded = base64.b64encode(json.dumps(post_data).encode())
print (post_data_encoded)

with requests.post(url, headers=headers, data=post_data_encoded) as req:
    print (req.json())

Однако ответ гласит:

{
    "data": {},
    "ret": {
        "code": 9,
        "msg": "Input byte array has incorrect ending byte at 900"
    }
}

Я попытался декодировать реальные запросы из своего браузера телефона, и он дал словарь со всем тем же параметры. Что здесь может быть не так?

Я рассматривал аналогичную проблему здесь: Входной байтовый массив имеет неправильный конечный байт в 40

Может быть, это b64encode в Python выводит иначе, чем java.util.Base64? Я ценю любое предложение.

1 Ответ

0 голосов
/ 20 июня 2020

Я нашел проблему. Base64 работает как положено. Проблема в моей просьбе. Вместо того, чтобы размещать post_data_encoded как data в запросе, я создал словарь {'request':post_data_encoded}, и результат оказался ожидаемым.

...