Мне нужно отправить некоторые данные на сервер, которым я не владею или не работаю.Данные должны быть отправлены в параметре формы через HTTP POST.Ключ должен быть «logs», а значение должно быть массивом JSON.Каждый элемент этого массива представляет собой строку CSV, ограниченную представлением в юникоде из Ctrl-A
, \u0001
( не литеральным символом).
Когда япреобразовать мой массив строк CSV в массив JSON через json.dumps
, он неявно экранирует некоторые символы (например, "
).
Проблема: json.dumps
также неявно экранирует мой разделитель CSV \u0001
, изменяя его на \\u0001
, что заставляет сервер отклонять мои данные.Чтобы обойти это, я вручную "un" -cape это: s.replace('\\\\u0001', '\\u0001')
Вопрос: Есть ли потенциальные последствия использования этого хакерского обходного пути?Есть ли более элегантный способ для меня решить эту проблему?
# Ctrl-A (\u0001) delimited CSV strings
logs = ['VAL1\\u0001{"key":"VAL2"}', 'VAL1\\u0001{"key":"VAL2"}']
# Serialize as JSON (it implicitly escapes chars, including Ctrl-A)
serialized_logs = json.dumps(logs)
# replace '\\u0001' with '\u0001' (unescape it)
# this seems HACKY -- is there a better way to handle this?
serialized_logs = serialized_logs.replace('\\\\u0001', '\\u0001')
# send over HTTP
params = { 'logs' : serialized_logs }
response = requests.post(url, data=params)
Примечание: python 2.7