Добрый день.
Пожалуйста, подскажите как решить проблему:
Получаем xml-файл с сервера, парсим и вносим изменения в данный xml-файл, отправляем обратно на сервер этот файл. Изначально была проблема в кодировке (кодировка битая приходила на сервер).
Перед тем как xml-файлу отправить на сервер, он подготовлен, кириллица отображается корректно и т.д.
def post_request(ip, xml_f):
#сохраняем полученные данные с сервера в xml-файл
with open('{0}'.format(xml_f), 'w', encoding='ISO-8859-1') as backup_safe:
backup_safe.write(data_xml.text)
# парсинг и замена значения раздела buffer
et = xml.etree.ElementTree.parse('{0}'.format(xml_f))
et.find('.//buffer').text = '45{0}'.format(date_now)
et.write('{0}'.format(xml_f), encoding="UTF-8", xml_declaration=True, default_namespace=None, method="xml")
# отправляет измененную xml-форму на сервер
with open('{0}'.format(xml_f)) as xml_file:
requests.post('http://{ip}/cgi-bin/xl.cgi?S=?fme=gh_dta.xml&log=store;den&sich=0'.format(ip=ip),
auth=('{login}'.format(login=ConfParse().read_conf()['LOGIN']['login']),
'{password}'.format(password=ConfParse().read_conf()['LOGIN']['pswd'])),
data=xml_file.encoding('utf-8'), headers=headers)
Возвращает исключение:
TypeError: 'str' object is not callable
Если не указывать "encoding"
data=xml_file
Возвращает исключение:
datablock = datablock.encode("iso-8859-1")
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 99-101: ordinal not in range(256)
UPD:
Решился вопрос элементарным добавлением with open('{0}'.format(xml_f), 'rb')