Ошибка чтения XMLStreamReader по запросу django

#django #xml #soap #django-rest-framework #python-requests

#django #xml #soap #django-rest-framework #python-запросы

Вопрос:

Мои XML-данные:

 xml_payload = 
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
        <Authentication >
            <username>blabla</username>
            <password>123456789</password>
        </Authentication>
    </soap:Header>
        <soap:Body>
            <data>
                <title>Test title</title>
                <content>Test body format</content>
            </data>
        </soap:Body>
</soap:Envelope>
 

Мой запрос в проекте django:

 try:
    url = "http://someurls.com"
    res = requests.post(url=url, data=xml_payload, headers={'Content-type': 'application/xml'})
    return response.content, response.status_code
except Exception as e:
    print(e)
    return None, 500
 

Когда я отправляю запрос с помощью postman, я получаю ответ, приведенный ниже:

 <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <soap:Fault>
            <faultcode>soap:Client</faultcode>
            <faultstring>Error reading XMLStreamReader.</faultstring>
        </soap:Fault>
    </soap:Body>
</soap:Envelope>'
 

Он возвращает ошибку. Я просматриваю Интернет, но не нашел ответа, который выполнил бы мой запрос.

Комментарии:

1. Это может быть параметр (params=xml_payload)?

2. @MatteoBianchi Нет

Ответ №1:

Попробуйте передать полезную нагрузку xml следующим образом:

 xml_payload = """<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
        <Authentication >
            <username>blabla</username>
            <password>123456789</password>
        </Authentication>
    </soap:Header>
        <soap:Body>
            <data>
                <title>Test title</title>
                <content>Test body format</content>
            </data>
        </soap:Body>
</soap:Envelope>"""
 

Ответ №2:

Спустя несколько дней я наконец нашел ответ. Когда я создаю полезную нагрузку xml с помощью python, python незаметно добавляет » n» в конце каждой строки. Поэтому, когда я заменил эти » n», я отлично работаю.

 xml_payload = xml_payload.replace("n", "")