Как отправить xml-файл requests.post на сервер?

Добрый день.

Пожалуйста, подскажите как решить проблему:
Получаем 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')
  • Вопрос задан
  • 1194 просмотра
Пригласить эксперта
Ответы на вопрос 1
@id2669099
а что если
data=xml_file.encode('utf-8')
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы